用户输入的Java验证错误

时间:2015-11-09 22:18:52

标签: java eclipse

我有以下代码,其中的想法是用户将输入两个数字,并计算两者的总和。 如果是无效值,例如输入一个字符,应输出错误信息,但我一直收到错误

爪哇

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;
                }

             }

这些是我收到的错误消息:

错误

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:909)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextDouble(Scanner.java:2456)
    at calculator.calculator.main(calculator.java:14)

我尝试了很多不同的东西但却无法让它按照我的意愿运作。

这里有人可以提供任何帮助吗?

感谢您阅读

4 个答案:

答案 0 :(得分:1)

Scanner类的实例抛出此异常,以指示检索到的标记与预期类型的​​模式不匹配,或者检索到的标记超出范围。

您可以在此处查看例外文档:https://docs.oracle.com/javase/7/docs/api/java/util/InputMismatchException.html

取自Scanner

上的文件
  

double nextDouble()

     

将下一个标记作为long返回。如果下一个令牌不是浮点数或   超出范围,抛出InputMismatchException。

我怀疑你没有正确输入你的号码。确保您的输入格式正确。

您还应该将扫描仪的locale设置为locales一些逗号,而不是点.,例如:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

答案 1 :(得分:0)

您的前两个输入应该是数字。如果这是真的,那么它可能是您的数字的小数点。您需要一个点(.)而不是逗号(,

答案 2 :(得分:0)

您似乎没有输入任何整数作为输入。

您可以通过以下方式处理异常来解决此问题:

try {
    if(input.hasNextInt()){   
         range = input.nextInt();
         if(0<=range && range <= 100)
             break;
         else
             continue;
    }
    input.nextLine();
}
catch (InputMismatchException e) {
    input.nextLine();
}

答案 3 :(得分:0)

您的问题是,

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