boolean z = false;
do {
try {
a = sc.nextInt();
z = true;
}
catch(Exception e) {
}
}
while(!z);
尝试这个。如果您第一次尝试使用整数,它会正确执行。但是,如果您输入错误的文本类型,即使您接下来输入 int 并跳过将布尔值分配给 true,它也会变成无限循环。为什么是这样?
您的问题是由于未处理行尾标记,因此扫描仪处于挂起状态。你想做这样的事情:
import java.util.Scanner;
public class Foo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
boolean catcher = false;
do {
try {
System.out.print("Enter a number: ");
a = sc.nextInt();
catcher = true;
} catch (Exception e) {
} finally {
sc.nextLine();
}
}
// !!while(catcher == false);
while (!catcher);
System.out.println("a is: " + a);
}
}
另外, while (z == false) 是不好的形式。使用 while (!z) 会更好。这可以防止 while (z = false) 错误,并且是表达此错误的更简洁的方式。
编辑马塞洛:
马塞洛,感谢您的投入和建议!您是说下面 if 块中的条件不会更改布尔值 spam 的值吗?
boolean spam = true;
if (spam = false) {
System.out.println("spam = false");
}
System.out.printf("spam = %b%n", spam);
因为如果它确实改变了它,如果编码员打算编写 if (spam == false),那么他们不会期望这种情况,那么这可能会产生微妙且危险的副作用。再次感谢您帮助我澄清这一点!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)