我正在尝试反转“主要”列中的2D阵列:
int[][] g ={{9, 8, 7, 6},{5, 4, 2, 1} , {3, 9, 2, 3}};
reverseColMajor(g) = {{3, 2, 9, 3} , {1, 2, 4, 5} , {6, 7, 8, 9}};
由于返回的2D数组的长度与原始数组的长度相同,因此,我只是尝试了此方法。
public static int[][] reverseColMajor(int mat[][])
{
int output[][] = new int[mat.length][mat[0].length];
int Row = 0;
int Col = 0;
for(int r = mat.length-1; r>=0; r--)
{
for(int c = mat[0].length-1; c>=0; c--)
{
output[Row][Col] = mat[r][c];
Col++;
}
Row++;
}
return output;
}
我已经在下面尝试过了,但是它说我超出范围了。
答案 0 :(得分:2)
由于Col
越过数组的边界,您越界异常。内循环完成后,您必须将Col
设置为零。
for(int c = mat[0].length-1; c>=0; c--)
{
output[Row][Col] = mat[r][c];
Col++;
}
Col=0;
Row++;
答案 1 :(得分:0)
在嵌套循环后设置Col = 0:
public static int[][] reverseColMajor(int mat[][])
{
int output[][] = new int[mat.length][mat[0].length];
int Row = 0;
int Col = 0;
for(int r = mat.length-1; r>=0; r--)
{
for(int c = mat[0].length-1; c>=0; c--)
{
output[Row][Col] = mat[r][c];
Col++;
}
Col = 0;
Row++;
}
return output;
}
答案 2 :(得分:0)
我会将方法分为两部分,一个用于反转1D数组,另一个用于使用第一个反转2D数组,因此这些方法更简单,可重用且非常相似。
public static int[][] reverse(int[][] in) {
int[][] out = new int[in.length][];
for (int i = 0, j = in.length - 1; j >= 0; i++,j--)
out[j] = reverse(in[i]);
return out;
}
public static int[] reverse(int[] in) {
int[] out = new int[in.length];
for (int i = 0, j = in.length - 1; j >= 0; i++,j--)
out[j] = in[i];
return out;
}
测试
int[][] g = {{9, 8, 7, 6}, {5, 4, 2, 1}, {3, 9, 2, 3}};
System.out.println(Arrays.deepToString(reverse(g)));
输出
[[3, 2, 9, 3], [1, 2, 4, 5], [6, 7, 8, 9]]