2014-09-22 99 views
0

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

+0

通常,您不要将增量**放在循环的大括号的末尾**,而是将它放在花括号之前**因此它在循环中并正确更新,因此不会发生无限循环 – nem035 2014-09-22 03:24:36

+0

让我们改变这一点有点悬而未决,因为0仍然出现,所以我会重新编写它。 – 2014-09-22 04:04:10

+0

当在a,b,c和d上面运行这段代码时,它们都是零,所以近似值如此不对, – 2014-09-22 04:07:20

回答

0

与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 ++; 
} 
+0

我尝试了你在我的新编辑中看到的响应。可悲的是,当试图围绕该计算进行更新时,为每个整数获取数组的正确值似乎很困难。 for循环比这更简单,但在这种情况下只允许while循环。 – 2014-09-22 04:13:27

0

你可以这样做。

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]; 
      } 
     } 
    } 

} 
+2

再次看看您的建议。它会抛出ArrayIndexOutOfBoundsException。 – Radiodef 2014-09-22 03:33:25

+0

@Le达·哈'异常在线程“主” java.lang.ArrayIndexOutOfBoundsException:7 \t在com.test.Test23.main(Test23.java:15) ' – 2014-09-22 03:37:25

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 :) 
      } 
     } 
    } 
} 
+0

可悲即时通讯做计算和仅while循环被允许在这部分 – 2014-09-22 04:26:27