【问题标题】:Can't find the infinite loop找不到无限循环
【发布时间】:2013-12-24 13:16:42
【问题描述】:

我正在为班级分配作业,但我的代码中某处出现了无限循环。我已经盯着它看了一天,甚至试图向我的教授寻求帮助(他出去了)。我尝试过调试,但中途迷路了。一组新鲜的眼睛将不胜感激。这是我的代码,如有必要,我可以提供更多。

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;
                }
            } 
        }
    }

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

【问题讨论】:

  • 语言?这看起来可能是 Java 或 C/C++。
  • 您确定在这些条件下需要 OR 吗?
  • @GreenMatt 它是 java
  • @Shomz 是的,我需要它们。只有当区域没有更多请求并且分配为空时,循环才应该结束。
  • 是的,但是请阅读我的答案...是否会发生其中一个变为 -1 而另一个为 0 的情况?如果是这样,循环将继续,只有当 两个 都为零时,循环才会中断。

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


【解决方案1】:

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

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

一旦两者都下降到零或以下,这将打破循环。

只有在迭代中它们都等于 0 时,您的原始条件才会中断(这可能会发生也可能不会发生)。

【讨论】:

  • 一个好建议我去改了,但没有解决问题。
  • 为什么不在每次迭代后进行一些调试并打印输出?做一个简单的测试用例,用for代替while
  • 好的,我可以试试。感谢您的帮助。
  • 没问题。我只是浏览了你的代码,所以我可能遗漏了一些东西,但是那个 while 循环看起来很可疑。
  • 印刷品是个好主意。问题似乎实际上是 for 循环。它成功处理了第一个请求,但之后它不会进入 for 循环,因此 numRequests 和allocated.size() 不会改变。现在找出原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多