gpt4 book ai didi

java - 尝试 Catch 不起作用 - 为什么?

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

在下面的代码中,我尝试在输入上实现 try-catch。当 while 时,它可以独立工作。循环未使用。这并没有达到我想要做的,所以我尝试了循环。然后这会创建一个无限循环,我不太明白为什么。

public static void AllIn() {
System.out.println("Please select your menu option: ");
while(true) {
try {
MenuSelect = Input.nextInt();
}
catch (InputMismatchException e) {
System.out.println("That's not a valid number!");
}
}

}

我认为可能有效的另一个解决方案是通过 catch 中的另一个方法调用此方法。堵塞。这创建了一个以 StackOverflowError 结束的循环。被退回。有人对如何让它发挥作用有建议吗?

我为此使用的变量是:

private static Scanner Input = new Scanner(System.in); 
private static int MenuSelect;

是的,我知道我不应该使用私有(private)静态来执行此操作,但我真的想不出替代方案。

最佳答案

您的 while 循环中没有任何 breakreturn,因此它完成的唯一方法是其条件为 false 。但它的条件是 true 所以它不可能是 false。这会创建一个无限循环。

还有另一个原因。当扫描器读取无效 int 时,它不会越过这些字符。这意味着下次扫描器尝试读取它时,无效的 int 仍然存在,并且它将尝试读取它,但失败了,这种情况一直持续下去。

一种解决方案是如果输入正确则break,如果失败则消耗int:

System.out.println("Please select your menu option: ");
while(true) {
try {
MenuSelect = Input.nextInt();
break;
}
catch (InputMismatchException e) {
System.out.println("That's not a valid number!");
Input.nextLine(); // consumes the invalid int.
}
}
// do stuff with the input here...

关于java - 尝试 Catch 不起作用 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50664312/

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