2D阵列从左到右,然后从右到左输出。似乎无法获得正确的元素

时间:2014-09-15 16:06:35

标签: java multidimensional-array

我必须在偶数行上从左到右输出我的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;

1 个答案:

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