使用Scanner.nextInt()与Scanner.nextLine()进行异常处理

时间:2014-08-13 02:49:37

标签: java exception-handling java.util.scanner

此问题仅供教育之用。我从Java教科书中获取了以下代码,我很好奇为什么在catch块中使用了input.nextLine()。

我尝试在其位置使用input.nextInt()编写程序。该程序将不再适当地捕获异常。当我传递一个非整数值时,控制台在线程中显示熟悉的"异常..."错误信息。

当我完全删除该行代码时,控制台将无休止地运行catch块的System.out.println()表达式。

Scanner.nextLine()的目的是什么?为什么每个场景都有不同的表现?

import java.util.*;

public class InputMismatchExceptionDemo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean continueInput = true;

    do {
        try{
            System.out.print("Enter an integer: ");
            int number = input.nextInt();

            System.out.println(
                    "The number entered is " + number);

            continueInput = false;
        }
        catch (InputMismatchException ex) {
            System.out.println("Try again. (" +
                    "Incorrect input: an integer is required)");
            input.nextLine();
            }
        }
        while (continueInput);
    }   
}

谢谢大家

1 个答案:

答案 0 :(得分:4)

当任何nextXxx(...)方法失败时,扫描仪的输入光标将重置为呼叫前的位置。因此,异常处理程序中nextLine()调用的目的是跳过"垃圾" number ...准备下次尝试让用户输入数字。

当您删除nextLine()时,代码会反复尝试重新解析同一个"垃圾"号。


值得注意的是,如果nextInt()调用成功,扫描程序将紧跟在数字的最后一个字符之后。假设您通过控制台输入/输出与用户交互,则可能可能需要或建议通过调用nextLine()来消耗线路的其余部分(直到换行)。这取决于您的应用程序下一步要做什么。

相关问题