Java 反转二维数组

Java 反转二维数组,java,arrays,reverse,flip,inversion,Java,Arrays,Reverse,Flip,Inversion,我正试图反转和翻转二维数组,但出现了一些问题!翻转可以正常工作,但反转不行。 在这里找不到错误: public int[][] flipAndInvert(int[][] A) { int row = -1; int col = -1; int[][] arr = A; for (int i = 0; i < arr.length; i++) { row++; col = -1; for (int j = a

我正试图反转和翻转二维数组,但出现了一些问题!翻转可以正常工作,但反转不行。 在这里找不到错误:

public int[][] flipAndInvert(int[][] A) {
    int row = -1;
    int col = -1;
    int[][] arr = A;

    for (int i = 0; i < arr.length; i++) {
        row++;
        col = -1;
        for (int j = arr[i].length - 1; j >= 0; j--) {
            col++;
            arr[row][col] = A[i][j];
        }
    }
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            if (arr[i][j] == 1) {
                arr[i][j] = 0;
            } else {
                arr[i][j] = 1;
            }
        }
    }
    return arr;
}
int[][] A = { { 0, 1, 1 },{ 0, 0, 1 },{ 0, 0, 0 } };
public int[]flipAndInvert(int[]A){
int行=-1;
int col=-1;
int[]arr=A;
对于(int i=0;i=0;j--){
col++;
arr[row][col]=A[i][j];
}
}
对于(int i=0;i
继续后,输出应为: 反转后: {1,1,0},{1,0,0},{0,0,0} 翻转后: {0,0,1,},{0,1,1},{1,1,1}

多亏了这么多,问题就在这里: int[]arr=A;
正在使用apache commons lang将数组的引用传递给arr.

    int[][] matrix = new int[3][3];
    for (int i = 0; i < matrix.length; i++) {
        matrix[i][0] = 3 * i;
        matrix[i][1] = 3 * i + 1;
        matrix[i][2] = 3 * i + 2;
    }

    System.out.println(Arrays.toString(matrix[0]));
    System.out.println(Arrays.toString(matrix[1]));
    System.out.println(Arrays.toString(matrix[2]));

    ArrayUtils.reverse(matrix);

    System.out.println(Arrays.toString(matrix[0]));
    System.out.println(Arrays.toString(matrix[1]));
    System.out.println(Arrays.toString(matrix[2]));
int[][]矩阵=新的int[3][3];
对于(int i=0;i

希望这能有所帮助。

我认为,既然您正在使用这条线路:

int[][] arr = A;
int[][] arr = A;
数组的引用被传递给arr,因此该行:

arr[row][col] = A[i][j];
相当于:

A[row][col] = A[i][j];
因为arr引用了A,它们现在都引用了相同的内存位置(或者它们都是单个变量的不同名称)

您可以通过将new关键字与arr一起使用,然后对其进行初始化来解决此问题:

int[][] arr = new int[someRows][someCols];
//use for loop to assign the value to each element of arr
或者可以运行for循环,直到arr[i]。长度/2-1:

    for (int i = 0; i < arr.length; i++) {
    row++;
    col = -1;
    for (int j = arr[i].length / 2 - 1; j >= 0; j--) { //here changed arr[i].length to arr[i].length / 2
        col++; 
        arr[row][col] = A[i][j]; //for this you do not need arr and you can directly work on A and return it
    }
}
for(int i=0;i=0;j--){//此处将arr[i].length更改为arr[i].length/2
col++;
arr[row][col]=A[i][j];//为此,您不需要arr,您可以直接处理A并返回它
}
}

代码的问题应该是这一行:

int[][] arr = A;
int[][] arr = A;

您正在将数组
A
的引用分配给
arr
,从那时起,当您修改一个数组时,您可以修改两个数组,或者更好地说,它们一起修改,因为它们引用相同的地址

你能分享一个2D阵列的样本和你想要得到的结果吗?这将有助于使问题更清楚。出了什么问题?实际输出与预期输出有何不同?@Mureinik addedyor翻转不起作用。我从输入数组
{0,1,1},{0,1,1},{1,1},{1,1},{1,1},{0,1,1},{0,1,1},{0,1,1}{/code>中得到的
{1,1,1},{1,1},{1,1},{1}似乎不是您想要的。@mypetlion前两个“for”循环正在反转,后两个翻转数组,所以我在这里找不到错误