扫描器类的nextInt()方法是否不要求我在while循环中输入?

时间:2018-11-11 12:05:56

标签: java exception-handling try-catch do-while

在我的主要方法中是以下代码:

int hours = getHours();

这是get hours()代码:

public static int getHours() {

    int hours = 0;
    boolean hoursNotOk = true;

    do {
    try {
        hours = console.nextInt();
        hoursNotOk = false;

    }catch(Exception e) {
        System.out.print(e);



    }finally {
        if(hoursNotOk) {
            System.out.print(", please re-enter the hours again:");

        }else {
            System.out.print("**hours input accepted**");
        }
    }
    }while(hoursNotOk);


    return hours;
}

第一次console.nextInt()要求我输入,因此可以说我在控制台中输入了“ 2”,它将引发异常并再次遍历try块,但这一次它没有询问我进行输入并不断从捕获中打印出来,最后阻止,为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

由于nextInt()仅读取数字,而不是在您按回车键后附加的\n,因此您需要清除以下内容才能再次读取数字,在此示例中,我会{{1} }在nextLine()块中。 here's more indepth explanation

工作示例:

catch

答案 1 :(得分:1)

一种更简单的方法是在引发异常之前测试您是否可以读取int。无论如何,您都需要先放弃当前单词或行,然后再试一次。

public static int getHours() {
    while (true) {
        if (console.hasNextInt()) {
            System.out.print("**hours input accepted**");
            return console.nextInt();
        }
        console.nextLine(); // discard the line and try again
        System.out.print(", please re-enter the hours again:");
    }
}