boolean z = false;
do {
try {
a = sc.nextInt();
z = true;
}
catch(Exception e) {
}
}
while(!z);
试试这个。如果在第一次正确执行时尝试整数。但是,如果输入错误的文本类型,即使您输入int next并跳过将布尔值赋值为true,它也会变为无限循环。这是为什么?
答案 0 :(得分:8)
问题在于没有处理行尾令牌,因此扫描仪处于悬空状态。你想做这样的事情:
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);
}
}
另外,虽然(z == false)是不好的形式。在(!z)时你会好多了。这可以防止while(z = false)错误,并且是一种更清晰的表达方式。
编辑Marcelo:
马塞洛,感谢您的意见和建议!你是说下面的if块中的条件不会改变布尔值,垃圾邮件的值吗?
boolean spam = true;
if (spam = false) {
System.out.println("spam = false");
}
System.out.printf("spam = %b%n", spam);
因为如果它确实改变了它,编码器就不会期望这样,如果他们打算写if(spam == false),那么这可能会产生微妙和危险的副作用。再次感谢您帮我澄清这一点!