【发布时间】:2017-06-21 20:14:20
【问题描述】:
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 个)。
当我尝试循环执行三个数字(即上述代码)时,我在“sum=sum+List[v ];
我很确定这意味着 List[v] 中的 v 是一个大于 List[v] 中列出的值的数字。 (它试图在只有 100 个值的数组中获取第 101 个值)。
问题是我不知道为什么会这样,因为在这个循环再次尝试运行之前,“v”应该被设置回 0。
【问题讨论】:
-
我建议,如果不调试,那么至少打印更多变量的值。希望这将有助于更快地弄清楚到底发生了什么。例如,我认为没有人会计算 List 数组的大小,这很乏味。并将代码拆分为更小的方法。
-
您能多解释一下您的
MovingAvgArray将持有什么吗?也许使用一个小的示例数据? -
数组中的数字列表 "List"= 1, 2, 3, 4, 5, 6 MovingAvgArray 将保存 (1+2)/2, (2+ 3)/2, (3+4)/2, (4+5)/2, (5+6)/2 数组的第二列将保存 - (1+2+3)/3,。 (2+3+4)/3, (3+4+5)/3, (4+5+6)/3 第三列将保持 - (1+2+3+4)/4, (2+3 +4+5)/4, (3+4+5+6)/4
标签: java loops nested-loops