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。
答案 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