dart - 如何在 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));
}
解决方案
你会得到一个无限循环,因为循环的条件永远不会失败。
条件是stock > 0
。但是,您在循环中所做的是:
- 如果
stock
减去某个值>0
,则递减stock
。因此stock
仍然高于0
- 否则你增加迭代器。
您实际上永远不会允许stock
减少到足以使其变为0
. 如果您的算法看起来合乎逻辑,我认为您if
应该使用 进行比较。>= 0
如果没有,那么您可能需要更多地返工。
推荐阅读
- python-3.x - Python多个具有不同延迟的For循环
- swift - 如何使用 swift 中的按钮点击动态更改 textview 中的字体?
- c# - 使用 LightInject 时如何注入 IServiceContainer?
- google-cloud-dataproc - Sqoop 导入到 avrodatafile 或 Parquet 文件在 dataproc 集群中失败
- asp.net - 如何在没有依赖注入的情况下在 Asp.Net Web Api 2 中使用 AutoMapper 9.0.0?
- c# - 为什么 JSON.Net 会修改原来的 JObject?
- javascript - 垂直滚动时不允许水平滚动(反之亦然)
- python - 在 Pandas Python 上使用 where 查询分组
- kotlin - kotlin:retrofit2 得到 404 url not found 错误
- dart-pub - 在 built_value 中嵌套生成