【问题标题】:Incrementing Multiple Nested While Loops递增多个嵌套的 While 循环
【发布时间】:2014-09-22 03:21:13
【问题描述】:

我遇到了增加 4 个嵌套 while 循环的问题。假设您有一个 double 类型的数组,以及许多整数来增加循环。这是一个例子

 private static double[] approxOfU(double w, double x, double y, double z,
        double u) {
    double a = 0, b = 0, c = 0, d = 0;
    final double[] powerArray = { -5.0, -4.0, -3.0, -2.0, -1, (-1.0 / 2.0),
            (-1.0 / 3.0), (-1.0 / 4.0), 0, (1.0 / 4.0), (1.0 / 3.0),
            (1.0 / 2.0), 1, 2, 3, 4, 5 };
    double[] temp = new double[5];
    double approx;
    int i = 0, j = 0, k = 0, l = 0;

    while (i < powerArray.length) {
        a = powerArray[i];
        while (j < powerArray.length) {
            b = powerArray[j];
            while (k < powerArray.length) {
                c = powerArray[k];
                while (l < powerArray.length) {
                    d = powerArray[l];
                    approx = Math.pow(w, a) * Math.pow(x, b)
                            * Math.pow(y, c) * Math.pow(z, d);
                    if (Math.abs(approx - u) / u <= 0.01) {
                        temp[0] = a;
                        temp[1] = b;
                        temp[2] = c;
                        temp[3] = d;
                        temp[4] = approx;

                    }
                    l++;

                }
                k++;
            }
            j++;
        }
        i++;
    }

    return temp;
}

我应该将我的增量(如 i++、j++、k++ 和 l++)放在哪里?分配只需要在项目的这一部分使用 while 循环。我已经开始工作的项目的 for 循环部分。请让我知道你的想法。此代码不是分配的真实代码,但我想了解如何更新这些嵌套循环并能够从中获取正确数据的逻辑。当我使用下面的变量输出到屏幕时,我最终得到了 0,所以有些不对劲。通常我将增量 1 (i++,j++, ... 等) 放在循环的花括号末尾。在这种情况下,该方法不会产生好的结果。请帮忙! :)

【问题讨论】:

  • 一般来说,你不会把增量放在循环的大括号的末尾,你把它放在大括号之前所以它在循环中并正确更新,因此不会发生无限循环
  • 让我们稍微改变一下,等一下,我要重新编辑它,因为 0 仍然出现。
  • 在 a、b、c 和 d 上方运行此代码时,将其设为零,因此近似值因此此处不正确

标签: java arrays while-loop


【解决方案1】:

如果您没有对索引做任何魔术,并且只需要循环中的数组元素(而不是索引),那么您可以使用增强的 for 循环:

double[] updateArray = new double[7];
/* fill your array */
for(double i : updateArray) {
    for(double w : updateArray) {
        for(double y : updateArray) {
            for(double x : updateArray) {
                // No incrementing or indices required :)
            }
        }
    }
}

【讨论】:

  • 很遗憾我在做计算,这部分只允许使用while循环
【解决方案2】:

和for循环一样,在循环结束时执行自增。

double[] updateArray = new double[7];
double w,x,y,z;
int i=0, j=0, k=0, l=0;
while(i < updateArray.length)
{
      w = updateArray[i];
    while(j < updateArray.length)
    {
      x = updateArray[j];
        while(k < updateArray.length)
        {
           y = updateArray[k];
            while(l < updateArray.length)
             {
                  z = updateArray[l];
              l ++;
             }
        k ++;
        }
     j ++;
    }
 i ++;
}

【讨论】:

  • 我尝试了您在我的新编辑中看到的回复。可悲的是,尽管尝试围绕该计算进行更新并为每个整数获取正确的数组值似乎很困难。 for 循环比这简单得多,但在这种情况下只允许使用 while 循环。
【解决方案3】:

你可以这样做。

double[] updateArray = new double[7];
double w,x,y,z;
int i=0, j=0, k=0, l=0;
while(i++ < updateArray.length -1)
{
      w = updateArray[i];
    while(j++ < updateArray.length -1)
    {
      x = updateArray[j];
        while(k++ < updateArray.length -1)
        {
           y = updateArray[k];
            while(l++ < updateArray.length -1)
             {
                  z = updateArray[l];
             }
        }
    }

}

【讨论】:

  • 再看你的建议。它将抛出 ArrayIndexOutOfBoundsException。
  • @Le Duy Khanh Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at com.test.Test23.main(Test23.java:15)
猜你喜欢
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多