在尝试学习try / catch异常处理时,我编写了非常简单的代码(n1 / n2 = sum)。
我有一个do / while循环,当成功运行时,它应该使x = 2。如果不是,则x = 1,其中可以再次输入用户输入。
代码编译并运行但是如果我尝试,例如n1 = 10,n2 = stackoverflow,来自捕获的异常的prinln将永远运行!
为什么循环卡住?
提前致谢
import java.util.*;
public class ExceptionHandlingMain {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int x = 1; // x originally set to 1
do { // start of do loop
try {
System.out.println("Enter numerator: ");
int n1 = input.nextInt();
System.out.println("Enter divisor");
int n2 = input.nextInt();
int sum = n1 / n2;
System.out.println(n1 + " divided by " + n2 + " = " + sum);
x = 2;
// when the code is completed successfully, x = 2 and do / while loop exits
} catch (Exception e) {
System.out.println("You made a mistake, moron!");
}
} while (x == 1);
}
}
答案 0 :(得分:2)
在input.nextLine()
块中添加catch
以清除读取的行。
答案 1 :(得分:1)
那是因为你按回车键输入号码。
我建议您添加input.nextLine();
调用,因此在从Scanner读取输入后也会使用返回键。
使用nextInt
api时,键入的内容如下:
123<return key>
nextInt
只会将123作为字符串选中并将其转换为数字并保留返回键部分。
答案 2 :(得分:0)
谢谢@barak manos(以及其他回复的人)
添加
input.nextLine();
后立即
System.out.println("You made a mistake, moron!");
清除输入流并允许用户输入新数据。
举: 答案改编自https://stackoverflow.com/a/24414457/4440127 用户:user3580294