【问题标题】:Why wont this value work in a while loop?为什么这个值不能在 while 循环中起作用?
【发布时间】:2015-11-16 05:52:28
【问题描述】:

这基本上就是我正在做的事情

while(true)  //cant check for zero, there is more to do here
{
    int val = 0;

    for(SomeObject i : arrayListOfSomeObjects)
    {
        if(canDoSomething)
        {
            val++
        }
    }

    if(val == 0)
    {
        break;
    }

    else
    {
        //do stuff with that nonzero value
    }
}

这很奇怪,因为循环不会产生。如中,如果不成功就停止。我有一个过程会一直持续到它完成,如果它不做任何事情(或不符合我在该操作中的条件)它不会改变值。这意味着对“val”的检查应该打破循环。但事实并非如此。它只是去。我什至在控制台上打印了“val”,但它返回 0。

在该操作结束时,即使值为 0,它也会继续运行!

【问题讨论】:

  • 你用调试器测试过吗?
  • 是的,正如我所提到的,“val”正在吐出 0。
  • 那么上面的代码是停止还是循环?
  • 上面的代码完全可以停止,所以我认为它在这个循环之外。尝试在 if 语句中放入 println 并检查以确保它已运行。以及 while 循环之前的第二个 println,以确保它在 while 循环已经退出后不会重新运行。
  • 不是真正的代码,因为缺少分号,至少。为什么不发布导致实际问题的实际代码?

标签: java loops while-loop break


【解决方案1】:

您可能需要通过添加标签来确保您的目标是“正确”循环:

label: while(true)  //cant check for zero, there is more to do here
{
    // ...

    if(val == 0)
    {
        break label;
    }

    // ...
}

这将确保您跳出while 循环,以防检查在另一个循环或switch 语句中。否则,我确信某些东西会导致您在示例中未显示的问题。小心不必要的副作用。

【讨论】:

    【解决方案2】:

    第一个 int val = 0 应该在循环之外,因为这将导致变量 val 的值始终为零

    【讨论】:

    • 我不确定这是否正确。在循环内部,值有可能发生变化,如果发生变化,它将继续。但是在某个时候,它无论如何都会中断。
    • 这不会改变,因为值可以在 if 语句旁边改变,如果没有,那么它应该 brean
    • 您是对的,但是您是否尝试过一个测试用例,它应该按预期运行,我认为错误来自“if (canDoSomething)”条件
    【解决方案3】:

    你的代码是正确的..试试下面的..

    int val = 1;
    while(val>0)
    {    
    
    //Some operation that will change the value IF successful
    
    }
    

    【讨论】:

    • 更好地使用val != 0val 也可以更改为负值。
    • 我更新了我的帖子来解释为什么我不能把条件放在 while 中
    • @DanielMills :在while循环外定义val变量;如果第二次执行循环,将创建新的 val 对象。即将有两个 val 对象。因此,我想它不起作用..
    • if(chg == 0) { 扫描 =true;休息; }
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多