java - 使用扫描仪时无限循环?

标签 java while-loop infinite-loop java.util.scanner

<分区>

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

试试这个。如果您第一次尝试使用整数,它会正确执行。但是,如果您输入了错误的文本类型,即使您接下来输入一个 int 并跳过将 boolean 值分配给 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) 错误,并且是一种更简洁的表达方式。

为马塞洛编辑:

Marcelo,感谢您的意见和建议!你是说下面 if block 中的条件不会改变 boolean spam 的值?

  boolean spam = true;

  if (spam = false) {
     System.out.println("spam = false");
  }

  System.out.printf("spam = %b%n", spam);

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

关于java - 使用扫描仪时无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4812398/

相关文章:

java - 为什么会无限循环? ( java )

Java:将对象突变限制在特定方法内

java - 使用用户输入的数字重复 for 循环

java - 对 Major.Minor.Incremental 字符串的 ArrayList 进行排序

带有终止符的 C++ switch case 计算器

Swift递归枚举在构造函数中进入无限循环

使用 GHCi 调试 Haskell 程序中的无限循环

Java服务器-客户端模型

C while循环不停止

谁能告诉我为什么这个无限的 while 循环不能正常工作?