Java 让计算器检查数据类型并输出消息?
我对Java真的很陌生,我正在尝试制作一个基本的计算器,我已经设法让它工作起来,并根据我的需要生成一个双精度计算器。我的问题是,如果用户输入了错误的数据类型,例如字符串,我希望它提供一条错误消息Java 让计算器检查数据类型并输出消息?,java,calculator,Java,Calculator,我对Java真的很陌生,我正在尝试制作一个基本的计算器,我已经设法让它工作起来,并根据我的需要生成一个双精度计算器。我的问题是,如果用户输入了错误的数据类型,例如字符串,我希望它提供一条错误消息 package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { double n1, n2; String n3; Sca
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
double n1, n2;
String n3;
Scanner inp = new Scanner(System.in);
System.out.print("Enter first value: ");
String inp1 = inp.nextLine();
n1 = Double.parseDouble(inp1);
System.out.print("Enter Second Value: ");
String inp2 = inp.nextLine();
n2 = Double.parseDouble(inp2);
System.out.print("Enter Operation: ");
String inp3 = inp.nextLine();
switch (inp3) {
case "+":
System.out.println("The result is: " + (n1 + n2));
break;
case "-":
System.out.println("The result is: " + (n1 - n2));
break;
case "*":
System.out.println("The result is: " + (n1 * n2));
break;
case "/":
System.out.println("The result is: " + (n1/n2));
break;
default:
System.out.println("Invalid Operation! \nPlease use '-,+,*,/' ");
}
}
}
这是我目前的代码,我愿意接受任何建设性的批评来改进我的代码。我似乎想不出一个办法来解决我的问题!
感谢您的帮助:)
抛出NumberFormatException
抛出以指示应用程序已尝试将字符串转换为其中一种数字类型,但该字符串没有适当的格式
所以只需围绕每个n1=Double.parseDouble(inp1)代码>使用尝试catch
并在catch
块中打印错误消息。使用异常
这样做,
System.out.print("Enter first value: ");
String inp1 = inp.nextLine();
try{
n1 = Double.parseDouble(inp1);
}
catch(NumberFormatException exc){
System.err.println("The input was not a valid double");
}
当parseDouble()
无法将给定字符串解析为双精度时,将抛出NumberFormatException
。上面的代码检查此异常是否在try
块中抛出,并“catch”它,并在catch
块中处理该异常。更多关于这个
了解有关异常的更多信息
不要使用变量名,如n1、n2、n3等。在较大的项目中,这会使您感到困惑
论双重用法的句法分析
try{
n2 = Double.parseDouble(inp2);
} catch(NumberFormatException numberFormatException){
System.out.println("Wrong number format of input: "+inp2+". Exception:" +numberFormatException.getMessage());
return;
}
如果您不想使用异常来检查输入字符串是否为数字格式,您可以始终使用一些lib,比如apachecommons。在本例中,代码如下所示
if (StringUtils.isNumeric(inp2)) {
n2 = Double.parseDouble(inp2);
} else {
System.out.println("Wrong number format of input: " + inp2);
return;
}
此处的更多信息:为了简单起见,您可以使用一种方法,在获得正确的输入之前不断请求输入,例如:
public double askForDouble(Scanner input){
while(true){
System.out.println("enter a good double:" ) ;
try{
return Double.parseDouble(input.nextLine());
}catch(Exception e){
System.out.println("not a good double try again...");
}
}
}
然后在主方法中,您可以替换
String inp1 = inp.nextLine();
n1 = Double.parseDouble(inp1);
与
同样的程序也适用于您的数学运算(例如+,-)
太该方法可能引发以下异常:
NullPointerException-如果字符串为null
NumberFormatException-如果字符串不包含可解析双精度
您可能需要在代码中加入try/catch,如:
try {
String inp1 = inp.nextLine();
if(null != inp1 ) {
n1 = Double.parseDouble(inp1);
}
} catch (NumberFormatException e) {
// Handle NFE.
}
我认为您希望在输入错误后处理异常。我看到您将String
输入解析为double,在这种情况下,应该从该解析方法中缓存NumberFormatException
。您可以从那里处理用户输入错误的字符串的情况
或者您使用inp.nextDouble()
从控制台读取数字,在这种情况下,可能会出现inputmaschException
,您可以处理此异常。您当前的问题是没有显示错误消息?如果用户输入错误的数字,您可以使用try-catch块向用户发送消息。在您的情况下,在解析数字时
n1 = askForDouble(inp);
try {
String inp1 = inp.nextLine();
if(null != inp1 ) {
n1 = Double.parseDouble(inp1);
}
} catch (NumberFormatException e) {
// Handle NFE.
}