gpt4 book ai didi

java - 这个 catch block 内部发生了什么?

转载 作者:行者123 更新时间:2023-11-29 04:46:31 25 4
gpt4 key购买 nike

我在网上发现这个代码是一个密码循环游戏,它运行良好,但我的问题是:如何实现?

这个catch block 到底发生了什么?

我特别好奇这一行:

reader.next();

boolean loop = true;
Scanner reader = new Scanner(System.in);
System.out.println("PIN: ");

while (loop) {
try {
Integer Code = reader.nextInt();

if (Code == 8273) {
System.out.println("Access granted");
loop = false;
} else {
System.out.println("Access denied");
}
} catch (Exception e) {
System.out.println("Please enter a valid PIN!");
reader.next();
}
}

编辑:当然我确实故意输入了一个非整数输入来导致异常。

编辑2:当我删除该行时,程序继续打印 Please enter a valid PIN!永远。

最佳答案

事实上,程序员在这里真正想要的是捕获下一行输入,并验证它是否是一个有效的整数。

但诚然,代码非常困惑。它依赖于这样一个事实,即默认情况下,当您使用 Scanner.nextLine() 以外的任何东西“吞下”下一个标记时,它依赖于当前的 delimiter ,默认匹配换行符。

不好。

这是一个更明确的版本:

String input;
int code;

while (true) {
System.out.print("PIN: ");
input = reader.nextLine();
try {
code = Integer.parseInt(input);
} catch (NumberFormatException ignored) {
// not an integer!
System.out.println("Enter a valid PIN!");
continue;
}
if (code == 8273)
break;
System.out.println("Access denied");
}

System.out.println("Access granted");

关于java - 这个 catch block 内部发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36898523/

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