找不到无限循环

时间:2013-12-07 01:51:28

标签: java loops for-loop while-loop infinite-loop

我正在为课程分配工作,我的代码中的某个地方会出现无限循环。我一直盯着它看了一天,甚至试图从我的教授那里得到帮助(他出去了)。我试过调试但是我在中途迷路了。一双新鲜的眼睛将非常感激。这是我的代码,如果有必要我可以提供更多。

while (numRequests != 0 || allocated.size() != 0) {

        for(int k = 0; k < allocated.size(); k++) {
            allocated.get(k).decreaseTime();
            if (allocated.get(k).equals(0)) {
                memory.deallocate(allocated.get(k).getId());
                startPoint -= allocated.get(k).getSize();
                allocated.remove(k);
                k--;
            }
        }


        for (int i = 0; i < pr.length; i++) {
            if (pr[i] != null) {
                String requestSize = pr[i].substring(0, pr[i].indexOf(","));
                int rSize = Integer.parseInt(requestSize);
                String requestTime = pr[i].substring(pr[i].indexOf(",") + 1);
                int rTime = Integer.parseInt(requestTime);
                int bSize = 0;
                if (rSize <= 1024) {
                    bSize = 1024;
                    if (rSize <= 512) {
                        bSize = 512;
                        if (rSize <= 256) {
                            bSize = 256;
                            if (rSize <= 128) {
                                bSize = 128;
                                if (rSize <= 64) {
                                    bSize = 64;
                                    if (rSize <= 32) {
                                        bSize = 32;
                                    }
                                }
                            }
                        }
                    }
                    if (bSize <= (1024 - startPoint)) {
                        pr[i] = null;
                        numRequests--;
                        allocatedMemory am = new allocatedMemory(i+1, bSize, rTime);
                        allocated.add(am);
                        memory.allocate(i+1, rTime, startPoint, bSize);
                        startPoint += bSize;
                    }
                }
                else {
                    break;
                }
            } 
        }
    }

我不是在寻求帮助来完成作业。我觉得自己需要这样做。我出于某种原因真的被困在这里,并且可以在正确的方向上使用轻推。非常感谢。

1 个答案:

答案 0 :(得分:1)

您应该在while条件部分使用AND(&amp;&amp;),或者将其更改为

while (numRequests > 0 || allocated.size() > 0) {

一旦它们的下降到零或以下,这将打破循环。

原始条件只有在迭代中它们等于零时才会中断(可能会也可能不会发生)。