来自用户输入的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;

我有下面的代码,其中的想法是用户将输入两个数字,然后计算两个数字的总和。 如果输入了无效值,例如字符,则应输出错误消息,但我不断收到错误

Java

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!");
    }
}