嵌套while循环在第一次迭代后停止?

时间:2013-09-16 20:11:05

标签: java loops while-loop nested

我正在尝试使用表“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++;
    }

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

了解mnop的初始值以及charms的值将会有所帮助是。但是有一个简单的原因,这不起作用:在循环之前,将mnop都设置为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循环将初始化,测试和增量逻辑放在一个地方。