我的代码中的无限循环

时间:2015-05-01 13:43:38

标签: java infinite-loop

我有这个代码,但我不知道为什么它在无限循环中运行..我试图在调试模式下知道,但是即使在休息时它也没有返回控件并继续....

private static void helper(List<Long> result,List<Long> values,
        Long duration, long tmp, int currPosition) {
    while(currPosition<values.size()){
        if( tmp==duration){
            for (Long long1 : result) {
                values.remove(values.indexOf(long1));
            }
            break;
        }
        else{
            if(values.get(currPosition)<=duration && values.get(currPosition)+tmp<=duration){
                result.add(values.get(currPosition));
                tmp+=values.get(currPosition);
                currPosition++;
                helper(result,values,duration,tmp,currPosition);
            }else if(values.get(currPosition)<=duration && values.get(currPosition)+tmp>duration){
                currPosition++;
                helper(result, values, duration, tmp, currPosition);
            }else if(values.get(currPosition)>duration){
                values.remove(currPosition);
                helper(result, values, duration, tmp, currPosition);
            }
        }
    }

}

3 个答案:

答案 0 :(得分:4)

只有当durationtmp相等时,您的循环才会退出,但它们永远不会更新。

除非参数相等,否则你的循环将永远运行(在这种情况下,它将运行一次直到break;语句。)

答案 1 :(得分:1)

循环while(currPosition<values.size())仅在您输入以下内容时停止:

            if( tmp==duration){
            for (Long long1 : result) {
                values.remove(values.indexOf(long1));
            }
            break;

我无法看到您更新tmpduration的位置,currPosition值增加的位置。 因为currPositionint值,所以永远不会将其作为参考传递给方法。因此currPosition始终具有相同的值,永远不会更新。

当迭代次数> = =停止主循环的列表大小时,你应该有另一个计数来停止。

答案 2 :(得分:0)

您正在使用没有条件停止的递归。 而不是你最初的时间,你应该添加:

if(currPosition<values.size())
{
  return;
}

您可以添加更适合的条件来停止递归。

此外,您在哪里更新durationtmp?如果你想要停止但是你没有更新它们,它们应该是平等的。