使用扫描仪时无限循环?

boolean z = false; do { try { a = sc.nextInt(); z = true; } catch(Exception e) { } } while(!z); 

尝试这个。 如果在第一次正确执行时尝试整数。 但是,如果输入错误的文本类型,即使您输入int next并跳过将布尔值赋值为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); } } 

而且,虽然(z == false)是不好的forms。 在(!z)时你会好多了。 这可以防止while(z = false)错误,并且是一种更清晰的表达方式。

编辑马塞洛:

马塞洛,感谢您的意见和建议! 你是说下面的if块中的条件不会改变布尔值,垃圾邮件的值吗?

  boolean spam = true; if (spam = false) { System.out.println("spam = false"); } System.out.printf("spam = %b%n", spam); 

因为如果它确实改变了它,编码器就不会期望这个,如果他们打算写if(spam == false),那么这可能会产生微妙和危险的副作用。 再次感谢您帮我澄清这一点!