[英]Java Validating Input in a Basic Calculator Program
我正在寻找如何使程序正确运行的答案。 我希望我的程序能够识别双精度数以外的其他东西-例如,如果我将其放置在idk中,它会说, 这不是一个数字,而是崩溃了。
我的代码:
import java.util.*;
public class CalculatorMain {
public static void main(String[] args) {
FunctionMain action = new FunctionMain();
Scanner input = new Scanner(System.in);
double answer = 0;
double inputNu1, inputNu2;
char operator;
boolean end = false;
while (! end ) {
System.out.print(">>>");
inputNu1 = input.nextDouble();
operator = input.next().charAt(0);
inputNu2 = input.nextDouble();
switch (operator)
{
case '-': answer = action.Subtract(inputNu1, inputNu2);
break;
case '*': answer = action.Multiply(inputNu1, inputNu2);
break;
case '+': answer = action.Add(inputNu1, inputNu2);
break;
case '/': answer = action.Divide(inputNu1, inputNu2);
break;
}
System.out.println(answer);
}
input.close();
}
}
public class FunctionMain {
double Subtract (double Nu1 , double Nu2)
{
return Nu1 + Nu2;
}
double Multiply (double Nu1 , double Nu2)
{
return Nu1 * Nu2;
}
double Add (double Nu1 , double Nu2)
{
return Nu1 + Nu2;
}
double Divide (double Nu1 , double Nu2)
{
return Nu1 / Nu2;
}
}
当您尝试将String转换为Double时,会出现异常,因此必须按以下方式进行管理:
double n = 0.0;
try {
n = input.nextDouble();
} catch (Exception e) {
// there was an error, and here we can do whatever
System.out.println( "It was not a number!" );
}
了解有关特权的更多信息: http : //docs.oracle.com/javase/tutorial/essential/exceptions/
就像是:
public static boolean isNumeric(String str)
{
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
要么:
public static boolean isNumeric(String str)
{
try
{
double d = Double.parseDouble(str);
}
catch(NumberFormatException nfe)
{
return false;
}
return true;
}
此处的主要思想是,当检索到的令牌与预期类型不匹配时,查找Scanner引发的异常。 如果在代码中输入了错误的输入,则会在控制台中看到java.util.InputMismatchException。 因此,我们可以仅使用try{....}catch(java.util.InputMismatchException e){....}
来捕获此特定异常并添加一些用户定义的操作。
我编辑了CalculatorMain类 ,现在,如果您输入的输入无法解析为两倍,控制台将输出警告,并提示您再次输入新的输入。
**Sample console output:** >>>jdk java.util.InputMismatchException jdk IS INVALID INPUT >>>test java.util.InputMismatchException test IS INVALID INPUT >>>input 10 * 789 7890.0
import java.util.*;
public class CalculatorMain {
public static void main(String[] args) {
FunctionMain action = new FunctionMain();
double answer = 0;
double inputNu1, inputNu2;
char operator;
boolean end = false;
Scanner input = new Scanner(System.in);
while (! end ) {
System.out.print(">>>");
try{
inputNu1 = input.nextDouble();
operator = input.next().charAt(0);
inputNu2 = input.nextDouble();
switch (operator){
case '-': answer = action.Subtract(inputNu1, inputNu2);
break;
case '*': answer = action.Multiply(inputNu1, inputNu2);
break;
case '+': answer = action.Add(inputNu1, inputNu2);
break;
case '/': answer = action.Divide(inputNu1, inputNu2);
break;
}
System.out.println(answer);
}catch(InputMismatchException e){
System.out.println(e.toString());
System.out.println(input.next() + " IS INVALID INPUT");
}
}
input.close();
}
}
有关Java异常的更多信息- 捕获和处理异常以及类InputMismatchException
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.