我必须在偶数行上从左到右输出我的2D数组,在奇数行上从右到左输出。我已经做到了,这不是问题所在。问题是当我尝试访问2D数组中的元素时,我变得非常困惑,因为现在奇数行被反转。
这是我当前的输出,输出是从左到右,从右到左:
0.5 0.62 0.35 0.6 0.5
0.13 0.25 0.25 0.62 0.45
0.65 0.85 0.2 0.2 0.8
这是输出而不对输出进行任何更改:
0.5 0.62 0.35 0.6 0.5
0.45 0.62 0.25 0.25 0.13
0.65 0.85 0.2 0.2 0.8
我需要得到每个2 X 2的平均值,然后找出哪个是最弱的。我已经这样做了,但数学似乎没有成功,我假设这是因为奇数行上的元素是相反的。
这是我目前找到最弱的输出:
0.5
0.45999999999999996
0.3625
0.3625
0.3625
0.3625
0.22499999999999998
0.22499999999999998
Weakest begins at (1, 2) with an average strength of 0.22499999999999998
这是正确的输出应该具有0.3175的平均强度:
Weakest begins at (1, 2) with an average strength of 0.3175
最后,这是我从右到左输出每个奇数行的代码:
int k = 0;
cd = new double[3][5];
for(int i = 0; i<cd.length;i++)
for(int j=0; j<cd[i].length;j++,k++)
cd[i][j]=gridArr[k];
for(int i = 0; i < cd.length; i++){
if(i%2==0)
for(int j = 0; j < cd[i].length; j++)
System.out.print(String.format("%-10s" ,cd[i][j]));
else
for(int j = cd[i].length -1; j >= 0; j--)
System.out.print(String.format("%-10s" ,cd[i][j]));
System.out.println();
}
以下是找到最弱的2 X 2的代码:
double weakest = getAverage(0, 0, 0, 0);
int weakestRow = 0;
int weakestCol = 0;
for(int row = 0; row < cd.length-1; row++){
for(int col = 0; col < cd[0].length-1;col++){
if(weakest > getAverage(row, row+1, col, col+1)) {
weakest = getAverage(row, row+1, col, col+1);
weakestRow = row;
weakestCol = col;
} System.out.println(weakest);
}
}
System.out.println("\nWeakest begins at "
+"("+weakestRow+", "+weakestCol+") with an average strength of "
+weakest);
}
有什么想法吗?我已经看了好几个小时,无法绕过它......
编辑:getAverage是:
double first = cd[startRow][startCol];
double second = cd[endRow][startCol];
double third = cd[startRow][endCol];
double fourth = cd[endRow][endCol];
return (first+second+third+fourth)/4;
答案 0 :(得分:0)
这是因为你的程序找到原始数组上的平方的平均值,而不是你反转奇数行的顺序。
显示数组无效。
你要做的是,在奇数行被反转的数组上调用你的getWeakest方法。
oddRowReversedArray = new double[3][5];
for(int i = 0; i < cd.length; i++){
if(i%2==0)
oddRowReversedArray[i] = cd[i]
else
for(int j = cd[i].length -1; j >= 0; j--)
oddRowReversedArray[i][j] = cd[i][cd.length -1 -j]
}
然后调用此数组的getWeakest。