import java.util.InputMismatchException; import java.util.Scanner;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean nvalid = true; // boolean to get out of do while when user input number
int a = 0;
System.out.println("enter number a");
do {
try {
a = sc.nextInt();
nvalid = true;
} catch (InputMismatchException e) {
System.out.println("please enter number only");
nvalid = false; //make the boolean false so do while will let user enter number again.
}
} while (nvalid == false);
System.out.println("out of do while");
}
嗨,我正在使用netbeans来练习java异常,我想在用户输入数字时捕获异常。
上面的代码会导致无限循环并阻止用户输入变量a
的值。
答案 0 :(得分:3)
您成功捕获了异常。那不是问题。
真正的问题是由在捕获异常之前发生的事情引起的。如果nextInt()
无法解析整数,则会放回它所查看的所有字符。
所以...当它再次绕过循环时,你的代码试图读取与以前完全相同的字符。那会失败,失败,失败......
解决方案:在要求用户再次尝试之前,使用nextLine()
跳过“错误输入”。你可以将它放在异常的catch块中。
请注意,这是一个坏主意/坏习惯:
.... while (nvalid == false);
您不应使用==
来测试布尔值是真还是假。这样做:
.... while (!nvalid);