java - 为什么我的 try catch 语句不起作用?
问题描述
该程序相当简单,我只是一个测试 try-catch 语句的初学者,尽管我已经阅读了 2 天,但我仍然无法理解为什么这个特定的 try 语句对我不起作用。我知道我可以使用 String 而不是 int,但我想知道为什么它对此不起作用,以及如何使它起作用。本质上我希望用户输入 1 或 2,如果他们输入 1,程序(测验)将开始,否则如果他们按 2,程序将终止。如果他们按下其他任何东西,例如一个字母、另一个数字,或试图按字面意思做任何其他事情,它会说“再试一次”并重复相同的循环。
这似乎是一个愚蠢的问题,但我对此很陌生,并且会感谢您的澄清。
Scanner scanner = new Scanner(System.in);
int score = 0;
System.out.println("Are you ready for a quiz?\n1.yes\n2.no");
int input = scanner.nextInt();
do {
scanner.nextInt();
try {
if (input == 2) {
System.out.println("Maybe next time!");
System.exit(0);
} else if (input == 1) {
System.out.println("Okay! good luck!\n");
}
} catch (InputMismatchException e) {
System.out.println("Invalid input. Try again\n");
}
} while (input != 1);
解决方案
1 . 问题是什么 ?
要看到Invalid input. Try again
aInputMismatchException
必须被扔进try
块内,它不会发生,因为输入没有进入if
or else if
,你期望的可以用
try {
if (input == 2) {
System.out.println("Maybe next time!");
System.exit(0);
} else if (input == 1) {
System.out.println("Okay! good luck!\n");
}else{
throw new InputMismatchException();
}
} catch (InputMismatchException e) {
System.out.println("Invalid input. Try again\n");
}
2 . 如何处理这种用法?
但是Exception
不必将其用作正常行为,并且要准备好Strings
,您需要:
System.out.println("Are you ready for a quiz?\n1.yes\n2.no");
String input;
do {
input= scanner.nextLine();
if (input.equals("2")) {
System.out.println("Maybe next time!");
System.exit(0);
} else if (input.equals("1")) {
System.out.println("Okay! good luck!\n");
}else{
System.out.println("Invalid input. Try again\n");
}
} while (!input.equals("1"));
3 . 如何改进它?
您可以更改 some 的位置print
,因此可以简化为:
System.out.println("Are you ready for a quiz?\n1.yes\n2.no");
String input;
do {
input= scanner.nextLine();
if (input.equals("2")) {
System.out.println("Maybe next time!");
System.exit(0);
}
System.out.println("Invalid input. Try again\n");
} while (!input.equals("1"));
System.out.println("Okay! good luck!\n");
推荐阅读
- vue.js - 表单为空时无法进行下一步
- alpha-vantage - 如何使用 Alpha Vantage api 密钥获取漂亮和感觉数据
- javascript - Chrome 扩展 HTML 树生成器不工作
- qt - mousePressEvent(QMouseEvent *) 上的 setCursor() 在释放鼠标之前不会更改光标。(Qt v5.5.1)
- java - 我可以修改 ReentrantLock 以便可以通过资源尝试使用它吗?
- python - ValueError:无法将字符串转换为浮点数:'horse'
- android - 如何使用改造和获取 id 保存 android SharedPreferences
- python - 使用openpyxl在excel下方附加数据帧时,我的excel表中的切片器被破坏
- modelica - 使用“在模型中保存起始值”选项帮助 Dymola 中的收敛
- javascript - 如何在nodejs中执行顺序基本命令?