gpt4 book ai didi

java - 为什么使用 nextInt() 的这段代码会永远循环?

转载 作者:行者123 更新时间:2023-12-01 18:12:53 24 4
gpt4 key购买 nike

下面的代码,

import java.util.Scanner;

public class Dummy {

static Scanner sc = new Scanner(System.in);

public static int getIntegerInput(String prompt){
int choice = 0;
for(;;){
System.out.print(prompt);
try{
choice = sc.nextInt();
break;
}catch(java.util.InputMismatchException ex){
System.out.print("What??? ");
}
}
return choice;
}
public static void main(String[] args) {
int choice = getIntegerInput("Enter a number: ");

} //end main
}

如果第一个用户输入引发异常,则不会停止等待下一个用户输入。

如何理解上面代码中的这个问题?放置sc.next()catch解决问题。但我仍然不清楚幕后发生了什么?解决这个问题的正确方法是什么?

最佳答案

nextXYZ() 无法使用 token 时,它会将其保留在 InputStream 中。在这里,您无休止地循环相同的输入 - 每次迭代,您都尝试使用此 token ,如果它不是整数,则抛出异常,捕获它,然后尝试再次读取它 - 永远。

编辑:
为了解决这个问题,您可以使用 next() 来使用该 token 并继续处理下一个:

for(;;) {
System.out.print(prompt);
try{
choice = sc.nextInt();
break;
} catch(java.util.InputMismatchException ex) {
sc.next(); // here
}
}

关于java - 为什么使用 nextInt() 的这段代码会永远循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616929/

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