为什么这个值在while循环中不起作用?

时间:2015-08-22 09:46:36

标签: java loops while-loop break

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

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。

在该操作结束时,即使值为IS 0,它仍然继续!

3 个答案:

答案 0 :(得分:0)

您的代码是正确的。请尝试以下操作..

int val = 1;
while(val>0)
{    

//Some operation that will change the value IF successful

}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可能需要通过添加标签来确保定位'正确'循环:

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

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

    // ...
}

如果检查是在另一个循环或while语句中,这将确保您突破switch循环。否则,我确信某些事情导致您未在示例中显示的问题。注意不必要的副作用。