【问题标题】:Java: infinite loop after an if inside a loopJava:循环内的if之后的无限循环
【发布时间】:2014-03-06 08:59:30
【问题描述】:

所以我有一个循环,它围绕着一个循环和一个 if 语句。但是,在运行程序时,它会退出内部循环(按计划),然后 if 语句(也按计划)失败,求助于 else 语句,这是一个简单的打印。

我/想要/发生的事情是拥有它(在 if 失败的情况下),重新启动到原来的内循环——因此是外循环。但相反,在 if 语句失败后,它开始一遍又一遍地循环“phrase2”。

这里是简化的代码:

int x = 1;
int y = 1;
int i = 0;
while(i == 0)
{
    while(<condition that is false>)
    {
        System.out.println("phrase1");
        a = input.nextInt();
        b = input.nextInt();        
    }
    if(<condition that is false>)
    {
        i = 1;
    }
    else
    {
        System.out.println("phrase2");
    }
}

感谢您的帮助!

编辑: 为了强调... 怎么了: 无限循环喷出“phrase2”。 我想要什么: else 执行完后,我想再次被带入内循环。

【问题讨论】:

  • 看起来一旦你遇到了“phrase2”的情况,你就永远不会更新任何其他数据,所以当然以前为假的条件仍然如此。您可能希望在 else 语句中执行某种重新初始化,以便正确重启。
  • 如果你是正确的&lt;condition that is false&gt; 确实总是假的,那么i 永远不会从零变化,所以while(i == 0) 当然会无限运行。 i 需要以某种方式改变。
  • 可能是条件本身有问题;可以加一下吗?
  • 在你的 else 子句中使 true
  • 看起来你正在遭受意大利面攻击;您是否考虑过可以重组代码以完全避免该问题的方法?

标签: java loops if-statement infinite


【解决方案1】:

无论您在内部循环中使用什么条件,只要确保它为真即可。

else
{
    System.out.println("phrase2");
    // SET THIS TO TRUE: <condition that is false>
}

这样内循环会再次触发。

【讨论】:

  • 谢谢,这就是问题所在。非常感谢!
  • 没问题,@anakhronizein
【解决方案2】:

你的控件永远不会进入下面的 if 语句

if(<condition that is false>)
{
    i = 1;
}

您可能需要调整您的条件,使其进入上述 if 块。在 if 语句中引入 System.out.println 进行调试

【讨论】:

  • 这不是他真正要问的。
【解决方案3】:

看起来您有一些代码可能想要运行一次,除非出现问题,然后您想要返回并重试。我通常使用的成语看起来像

boolean needToRetry;
do {
    needToRetry = false;
    // do whatever
    if (somethingWentWrong) {
        needToRetry = true;
        // set this at any point where you find you will need to go back
    }
} while (needToRetry);

重要的是您需要在每次循环开始时重置您的标志 (needToRetry)。 (P.S. 还有其他方法可以使用breakcontinue,虽然我个人不喜欢使用continue。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多