我正在尝试使用表“charms”比较值,但我的外部3个循环只会注册第一次迭代;只有最里面的循环比较所有值。
while (m < 17) {
while (n < 17) {
while (o < 17) {
while (p < 17) {
number = (Math.pow(w, charms[m]))
* (Math.pow(x, charms[n]))
* (Math.pow(y, charms[o]))
* (Math.pow(z, charms[p]));
if (Math.abs(cons - number) < Math.abs(cons - closest)) {
closest = number;
a = charms[m];
b = charms[n];
c = charms[o];
d = charms[p];
}
p++;
}
o++;
}
n++;
}
m++;
}
答案 0 :(得分:4)
首先,您没有展示如何初始化m, n, o and p
。其次,您不会在任何时候重置计数器。一旦你经历了最内层的循环,你将永远不会再次经历它,因为p
之后将大于或等于17。然后一旦o
达到17,你将永远不再进入那个循环,依此类推。
答案 1 :(得分:0)
了解m
,n
,o
和p
的初始值以及charms
的值将会有所帮助是。但是有一个简单的原因,这不起作用:在循环之前,将m
,n
,o
和p
都设置为1。然后内部循环执行并在p
为17时退出。那么你递增o
并开始循环 - 但是p
是什么?现在还是17岁!它永远不会退回到1或其他什么。因此,最里面的循环中的代码都没有再次执行过。
至少,您需要在循环之前重置每个变量:
while (m < 17) {
n = 1; // or whatever, you haven't told us what it's supposed to start at
while (n < 17) {
o = 1;
while (o < 17) {
p = 1;
while (p < 17) {
甚至更好,使用for
循环将初始化,测试和增量逻辑放在一个地方。