来自用户输入的Java验证错误
我有下面的代码,其中的想法是用户将输入两个数字,然后计算两个数字的总和。 如果输入了无效值,例如字符,则应输出错误消息,但我不断收到错误 Java来自用户输入的Java验证错误,java,eclipse,Java,Eclipse,我有下面的代码,其中的想法是用户将输入两个数字,然后计算两个数字的总和。 如果输入了无效值,例如字符,则应输出错误消息,但我不断收到错误 Java package calculator; import java.util.Scanner; public class calculator { /** * @param args */ public static void main(String[] args) { double n1, n2;
package calculator;
import java.util.Scanner;
public class calculator {
/**
* @param args
*/
public static void main(String[] args) {
double n1, n2;
String operation;
Scanner scannerObject = new Scanner(System.in);
System.out.println("Enter first number");
n1 = scannerObject. nextDouble();
System.out.println("Enter second number");
n2 = scannerObject. nextDouble();
Scanner op = new Scanner(System.in);
System.out.println("Enter your operation");
operation = op.next();
switch (operation) {
case "+":
System.out.println("Your answer is " + (n1 + n2));
break;
case "-":
System.out.println("Your answer is " + (n1 - n2));
break;
case "/":
System.out.println("Your answer is " + (n1 / n2));
break;
case "*":
System.out.println("Your asnwer is " + (n1 * n2));
break;
default:
System.out.println("I do not know!");}
}
int function(){
Scanner input = new Scanner(System.in);
System.out.print("Enter an integer between 1-100: ");
int range;
while(true){
if(input.hasNextInt()){
range = input.nextInt();
if(0<=range && range <= 100)
break;
else
continue;
}
input.nextLine(); //Comsume the garbage value
System.out.println("Enter an integer between 1-100:");
}
return range;
}
}
我尝试过很多不同的方法,但都不能让它按我想要的方式工作
这里有人能帮忙吗
感谢阅读您的前两个输入应该是数字。如果这是真的,那么它可能是数字的小数点。您需要一个点(
)而不是逗号(,
)似乎您没有输入任何整数作为输入
您可以通过以下方式处理异常来解决此问题:
try {
if(input.hasNextInt()){
range = input.nextInt();
if(0<=range && range <= 100)
break;
else
continue;
}
input.nextLine();
}
catch (InputMismatchException e) {
input.nextLine();
}
试试看{
if(input.hasNextInt()){
range=input.nextInt();
如果(0此异常由Scanner
类的实例引发,以指示检索到的令牌与预期类型的模式不匹配,或者检索到的令牌超出范围
您可以在此处查看异常的文档:
摘自
double nextDouble()
将下一个标记返回为long。如果下一个标记不是float或
超出范围,引发InputMismatchException
我怀疑您输入的号码不正确。请确保您输入的格式正确
您还应该将扫描仪的区域设置设置为一些区域设置,例如,除了逗号,
而不是点
,例如:
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
你的问题是
scannerObject. nextDouble();
您正在尝试获取一个双精度输入,但输入了一个字符串。您需要执行如下某种输入验证,以防止程序在输入无效时崩溃
try {
System.out.println("Enter first number");
n1 = scannerObject. nextDouble();
}
catch(InputMismatchException inEx) {
System.out.println("Invalid input");
}
然后,您可能希望创建一个循环,以再次获取输入并重新输入,直到检测到有效输入
编辑
你需要
import java.util.InputMismatchException;
还要创建一个循环以从用户处获取有效输入。如下所示。这只是一个示例,您需要执行类似操作才能使用代码。还需要确保n1和n2在实际使用其值之前已启动
boolean notValidInput = true;
while(notValidInput) {
try {
System.out.println("Enter first number");
n1 = scannerObject. nextDouble();
notValidInput = false;
}
catch(InputMismatchException inEx) {
System.out.println("Invalid input. Please try again!");
}
}
你的输入是什么?我试着输入一个字母“p”。当我把它改为点时,代码不会运行,它说应该是逗号,然后就不会运行了。不是你的代码,你的输入数字应该是一个点。我刚刚试着用这个来代替我的“while”节,它抛出错误InputMismatchException无法解析为类型InputMismatchException无法解析为类型…还说n1不是initialisedOkay,所以我将其编辑为您最近的版本,但我如何初始化n1和n2,因为现在只有这两个errorsperhaps将重要值设置为0?看起来是双n1=0为了工作,它不再显示代码中的任何错误,但在我运行程序时仍会出现错误。在线程“main”中输入第一个数字j无效输入异常在java.util.Scanner.throwFor(Scanner.java:909)在java.util.Scanner.next(Scanner.java:1530)中输入第二个数字java.util.InputMismatchException位于calculator.calculator.main(calculator.java:36)的java.util.Scanner.nextDouble(Scanner.java:2456)
boolean notValidInput = true;
while(notValidInput) {
try {
System.out.println("Enter first number");
n1 = scannerObject. nextDouble();
notValidInput = false;
}
catch(InputMismatchException inEx) {
System.out.println("Invalid input. Please try again!");
}
}