首页 > 解决方案 > 如何在 while 循环中找到错误?

问题描述

我需要帮助。我写了代码并检查了一百次。但我找不到错误。while循环之前的所有代码都可以正常工作。循环本身的错误。当你运行它时,你会得到一个无限循环。

如果您能告诉我我在哪里犯了错误,以及为什么它变成了一个无限循环,我将不胜感激。

class Semis {
  int i;
  double k;

  Semis(this.i, this.k);
}

void main() {
  var p = [
    0, 1, 5, 8, 9, 10, 17, 17, 20, 24, // 0X's
    30, 32, 35, 39, 43, 43, 45, 49, 50, 54, // 1X's
    57, 60, 65, 68, 70, 74, 80, 81, 84, 85, // 2X's
    87, 91, 95, 99, 101, 104, 107, 112, 115, 116, // 3X's
    119, 121, 125, 129, 131, 134, 135, 140, 143, 145, // 4X's
    151
  ];

  Function cutLog = (List p, int n) {
    // Some array to store calculated values
    num sum = 0;
    int iter = 0;
    int stock = n;
    List<Semis> pL = [];

    var map = Map.fromIterable(p,
        key: (index) => p.indexOf(index),
        value: (item) => item / (p.indexOf(item) > 0 ? p.indexOf(item) : 1));
    var sortedMap = Map.fromEntries(
        map.entries.toList()..sort((e1, e2) => e2.value.compareTo(e1.value)));

    sortedMap.forEach(
        (i, k) => pL.isEmpty || pL.last.i > i ? pL.add(Semis(i, k)) : null);

    while (stock > 0) {
      if ((stock - pL[iter].i) > 0) {
        sum = sum + p[pL[iter].i];
        stock = stock - pL[iter].i;
      } else
        iter++;
    }

    return sum; // Good luck intern!
  };
  print(cutLog(p, 5));
}

标签: dart

解决方案


你会得到一个无限循环,因为循环的条件永远不会失败。

条件是stock > 0。但是,您在循环中所做的是:

  • 如果stock减去某个值>0,则递减stock。因此stock仍然高于0
  • 否则你增加迭代器。

您实际上永远不会允许stock减少到足以使其变为0. 如果您的算法看起来合乎逻辑,我认为您if应该使用 进行比较。>= 0如果没有,那么您可能需要更多地返工。


推荐阅读