错误的“主”线程中的输入异常错误

时间:2019-09-20 12:12:39

标签: java

如果我将int number = scanner.nextInt ();放在if括号中并输入错误的输入,则会出现问题。

但是,如果我没有在if之外编写它,则在输入错误的输入时会出现以下错误

Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at UserInput.main(UserInput.java:15)

代码:

import java.util.Scanner;

public class UserInput {

public static void main(String[] args) {
    int Sum=0, counter = 0,no=1;
    Scanner scanner;
    scanner = new Scanner(System.in);

    do {
        System.out.println("Enter number #" + no + " = ");

        boolean result =  scanner.hasNextInt();
        int number = scanner.nextInt();

        if(result == true)
        {
            counter = counter + 1;
            Sum = Sum + number;
            no = no+1;
        }
        else
        {
            System.out.println("Invalid Input");
        }
        scanner.nextLine();
        }while(counter<10);
    System.out.println("Sum = " + Sum );
    scanner.close();
    }
}

2 个答案:

答案 0 :(得分:0)

通过将其放入if,除非知道要获取一个(即nextInt是真的),否则您不会呼叫result

答案 1 :(得分:0)

如果hasNextInt()返回false,则表示扫描程序的下一个令牌(令牌=“已扫描”的对象的片段)不是整数。如果现在尽管下一个标记实际上不是Integer,则现在调用方法nextInt(),则将得到InputMismatchException。正如Scott所说,通过将调用放在if语句中,可以防止这种情况的发生,因为您可以确保下一个令牌是Integer,并且可以实际调用nextInt()。