java - 反转二维数组

标签 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 = 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 } };

继续后输出应为: 反转后: {1,1,0},{1,0,0},{0,0,0} 翻转后: {0,0,1,},{0,1,1},{1,1,1}

非常感谢大家,问题就在这里: int[][] arr = A; 数组的引用被传递给 arr。

最佳答案

我认为既然你使用了这一行:

int[][] arr = A;

数组的引用被传递给 arr,因此该行:

arr[row][col] = A[i][j];

相当于:

A[row][col] = A[i][j];

因为 arr 具有对 A 的引用,并且它们现在都引用相同的内存位置(或者它们对于单个变量来说都是不同的名称)

您可以通过使用带有 arr 的 new 关键字然后初始化它来解决此问题:

int[][] arr = new int[someRows][someCols];
//use for loop to assign the value to each element of arr

或者你可以运行 for 循环直到 arr[i].length/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
    }
}

关于java - 反转二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51215821/

相关文章:

java - 如何在 C# 使用的 Java Web 服务中返回带有数组的类

java - executeUpdate 异常

arrays - JSON 模式中的多值枚举?

ios - 如何对存储在字典中的元组内的数组进行排序

c++ - 字符串中单词的逆序

centos - centos 6.4总是做dns反向查询吗?

java - 在 zip 存档中使用 Unicode 字符作为文件名

java - java编写xml时的xml命名空间

c - 打印期间出现段错误,包括大型数组计算

php - 仅反转字符串中包含非希伯来语字符的连续希伯来语单词的方向