我的循环有什么问题?

时间:2017-06-21 20:14:21

标签: java loops nested-loops

public class Prices {

    public static void main(String[] args) {
    int i = 100; 
    int z = 0;
    int x = 0;
    int a = 0;
    int v = 0;
    double sum = 0;
    double[][] MovingAvgArray = new double[i][i];
    double[] List = {20.19, 21.67, 22.49,   22.26,23.99, 23.75, 23.34, 23.54, 23.25, 23.9, 23.84, 23.19, 22.03, 22.7,   21.14, 22.54, 24.36, 24.85, 23.96, 25.1,    20.79, 19.96, 19.98,    19.54, 19.09, 18.47, 18.59, 18.96, 18.93, 18.79, 19.06, 19.82, 19.5, 19.13, 19.25, 18.9,    19.05,  19.02,  19.09,  18.73,  18.44,  18.65,  18.07,  18.12,  17.92,  18.21,  17.81,  18.57,  18.92,  18.4,   17.83,  17.83,  18.55,  18.25,  18.55,  17.72,  17.28,  17.37,  16.99,  16.28,  17.02,  15.68,  15.73,  16.45,  15.54,  15.15,  15.51,  15.51,  15.54,  15.05,  14.98,  15.88,  16.14,  16.2,   16, 16.82,  17.74,  18.01,  17.99,  18.01,  16.99,  18, 18.3,   19.02,  18.14,  18.95,  19.19,  18.67,  17.63,  17.6,   17.56,  18.59,  18.57,  19.07,  19.57,  19.59,  18.71,  18.71,  18.75,  19.37};


      do{  

         do{

            for(;v < a + x +2;) 
            {
               sum = sum + List[v];  
               v++;               
            }

            MovingAvgArray[x][z] = sum;
            MovingAvgArray[x][z] = (MovingAvgArray[x][z])/(x + 2.0);

            System.out.println(MovingAvgArray[x][z]);
            z++;
            a++;
            sum = 0;
            v--;  

         }while(z<100-(x+1));
         v = 0;
         z=0;
         x++;
         }while(x<i-2);
    }
}

该程序的目标是获得数据列表的移动平均值(在for循环中计算),从前两个数字的移动平均值开始,然后是前三个移动平均值,等等。并将其插入MovingAvgArray。两个数字的移动平均值将在数组值[0] [0到(i-3)]上,三个数字的平均值将在值[0] [0到(i-4)]上等等。直到这不再可能。

如果我取出最外面的do-while循环程序运行没有错误,但只计算两个数字的移动平均值(将有98个)。

当我尝试循环它做三个数字,这是上面的代码我得到错误“线程中的异常”主“java.lang.ArrayIndexOutOfBoundsException:100”在行上说“sum = sum + List [v ];

我非常确定这意味着List [v]中的v是一个大于List [v]中列出的值的数字。 (它试图在只有100个值的数组中得到第101个值)。

问题是我不知道为什么会发生这种情况,因为在此循环尝试再次运行之前,“v”应该设置回0。

1 个答案:

答案 0 :(得分:0)

我允许自己在代码中添加额外的println,比如

            v--;
            System.out.println(" ------------------ v=" + v);
            System.out.println(" ------------------ z=" + z);
            System.out.println(" ------------------ x=" + x);
            System.out.println(" ------------------ a=" + a);

        } while (z < 100 - (x + 1));
        System.out.println(" HERE ");
        v = 0;

只是为了观察:

19.060000000000002
 ------------------ v=99
 ------------------ z=99
 ------------------ x=0
 ------------------ a=99
  HERE 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
    at Prices.main(Prices.java:24)

这意味着由

控制的循环
  

while(z <100 - (x + 1))

结束。 a 仍为99, x 增加1,使 a + x + 2 = 102

相关问题