【问题标题】:Do/While Loop looping when condition set to false当条件设置为 false 时执行/While 循环循环
【发布时间】:2018-03-07 21:49:21
【问题描述】:

这个 do/while 循环如果出现错误,将无限循环,即使每次循环后 error 都设置为 false...我不知道如何解释它。

import java.util.Scanner;

public class ErrorChecking {

    public static int inputInt(Scanner input, String console) {

        int finalInt = 0;
        int num;
        boolean error = false;

        do {
            error = false;
            System.out.print(console);
            if(input.hasNextInt()) {
                num = input.nextInt();
                String numDuplicate = Integer.toString(num);
                int numLength = numDuplicate.length();
                if(numLength == 8) {
                    finalInt = num;
                    error = false;
                } else {
                    System.out.println("Invalid input. ID needs to be 8 digits long. Please try again.");
                    error = true;
                }
            } else {
                System.out.println("Invalid input. ID needs to be 8 numbers. Please try again.");
                error = true;
            }
        } while(error);

        return finalInt;

    }

}

【问题讨论】:

  • @Amit Phaltankar,这与我的问题无关。此外,该错误仅存在于此方法中,我检查了其他编程以确保没有其他冲突。

标签: java loops methods java.util.scanner


【解决方案1】:

如果input.hasNextInt() 曾经返回false,那么你的循环将永远运行,因为你没有做任何事情来推进输入,它会在每次迭代中返回false。我的猜测(没有关于你的程序行为的更多细节)是这就是正在发生的事情。

您需要以某种方式消耗当前输入来清除错误情况。执行此操作的逻辑取决于您期望的输入。

【讨论】:

  • 您想要项目文件夹以便查找其他问题吗?
  • input.nextLine() 会起作用吗?我将它与 nextInt() 一起用于使用换行符。
  • @AfterShock360 - 如果您期望每行一个 int,这听起来很合理。或者只是调用next() 来使用下一个令牌。
  • 好吧,经过一番折腾,它成功了。谢谢@Ted Hopp!我仍然只有一年的编码,所以这些东西对我来说并不明显(还)
猜你喜欢
  • 2014-03-03
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2014-11-23
  • 1970-01-01
  • 2017-09-08
相关资源
最近更新 更多