gpt4 book ai didi

java - 使用 Scanner.nextInt() 与 Scanner.nextLine() 的异常处理

转载 作者:行者123 更新时间:2023-11-29 03:18:10 28 4
gpt4 key购买 nike

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

我尝试使用 input.nextInt() 代替它来编写程序。该程序将不再正确捕获异常。当我传递整数以外的值时,控制台显示熟悉的“线程异常...”错误消息。

当我完全删除那行代码时,控制台将无休止地运行 catch block 的 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);
}
}

谢谢大家

最佳答案

当任何 nextXxx(...)方法失败,扫描仪的输入光标将重置为调用前的位置。所以 nextLine() 的目的异常处理程序中的调用是跳过“垃圾”数字……为下一次让用户输入数字的尝试做好准备。

当你删除了 nextLine() ,代码反复尝试重新解析相同的“垃圾”号码。


还值得注意的是,如果nextInt()调用成功,扫描仪将立即定位在号码的最后一个字符之后。假设您通过控制台输入/输出与用户交互,可能通过调用 nextLine() 消耗该行的其余部分(直到换行符)是必要的或可取的。 .这取决于您的应用程序下一步要做什么。

关于java - 使用 Scanner.nextInt() 与 Scanner.nextLine() 的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277286/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com