首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scanner.nextInt()与Scanner.nextLine()的异常处理

Scanner.nextInt()与Scanner.nextLine()的异常处理
EN

Stack Overflow用户
提问于 2014-08-13 10:49:37
回答 1查看 14.8K关注 0票数 1

这个问题完全是为了教育目的。我从一本关于Java的教科书中摘取了以下代码,我很好奇为什么在catch块中使用input.nextLine()。

我试着用input.nextInt()代替它来编写程序。程序将不再正确地捕获异常。当我传递一个不是整数的值时,控制台显示熟悉的"Exception in thread...“错误消息。

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

Scanner.nextLine()的用途是什么?为什么这些场景都会有不同的结果?

代码语言:javascript
复制
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);
    }   
}

谢谢大家

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-13 10:56:00

当任何nextXxx(...)方法失败时,扫描器的输入游标将被重置到调用之前的位置。因此,异常处理程序中的nextLine()调用的目的是跳过“垃圾”编号...为下一次让用户输入数字做好准备。

当您删除nextLine()时,代码会反复尝试重新解析相同的“垃圾”数字。

还值得注意的是,如果nextInt()调用成功,则扫描器将紧跟在数字的最后一个字符之后。假设您是通过控制台输入/输出与用户进行交互的,那么通过调用nextLine()来使用该行的其余部分(直到换行符)可能是必要的,也是明智的。这取决于你的应用程序下一步要做什么。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25277286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档