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
的值。
您成功地捕获了异常。那不是问题。
真正的问题是由之前发生的引起的。如果nextInt()
无法解析整数,则将其查看的所有字符放回。
so ...当它再次绕循环时,您的代码正在尝试与以前的字符完全相同。那会失败,失败,失败...
解决方案:在要求用户重试之前,请使用nextLine()
跳过"不良输入"。您可以将其放在例外的捕获块中。
请注意,这是一个坏主意/坏习惯:
.... while (nvalid == false);
您不应使用 ==
来测试布尔值是对还是错。而是这样做:
.... while (!nvalid);