0

我正在尝试使用表“魅力”比较值,但我的外部 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++;
    }
4

2 回答 2

4

首先,您没有展示如何初始化m, n, o and p. 其次,您不会在任何时候重置计数器。一旦你通过最内层循环一次,你将永远不会再通过它,因为在那之后p将大于或等于 17。然后一旦o达到 17,您将永远不会再进入该循环,依此类推。

于 2013-09-16T20:17:32.747 回答
0

m了解、no和的初始值是什么p以及 的值是什么会很有帮助charms。但是这不起作用有一个简单的原因:说m, n, o, 和p在循环之前都设置为 1。然后内部循环在 17 时执行并退出p。然后你递增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将初始化、测试和增量逻辑放在一个地方的循环。

于 2013-09-16T20:19:35.927 回答