Java 改变二维数组中的值

标签 java arrays multidimensional-array

我正在使用二维数组,我在下面的方法中尝试做的是交换两个值。 “currentBoard”变量是一个二维数组,不应编辑。 “cpy”变量是“currentBoard”的副本,需要更改其变量。 'nbt' 和 'bt' 是一维数组,用于指向二维数组中的索引。如果有帮助的话,函数“copyBoard”的代码总是在下面

我遇到的问题是,在标有 ** 的行上,当“cpy”数组中的值由于某种原因更改时,“currentBoard”中的值也会更改。我真的不明白为什么会发生这种情况......

<小时/>
private void Swap(int[] nbt, int[] bt, ArrayList<State> children, String direction) {

    int[][] cpy = copyBoard(currentBoard);
    int temp = cpy[nbt[0]][nbt[1]];
    **cpy[nbt[0]][nbt[1]] = currentBoard[bt[0]][bt[1]];
    cpy[bt[0]][bt[1]] = temp;
    children.add(new Board(cpy, this.getGOAL(), this.getRows(), this.getColumns(), (this.getDirections() + direction + ", ")));
}
<小时/>

如果这里有帮助,那就是当代码位于标有 ** 的行时分配给变量的值

<小时/>

nbt = {1, 0} bt = {0, 0}

private int[][] copyBoard(int[][] state)
{
    int[][] returnArray = new int[rows][columns];
    for (int i = 0, j = 0; i*j < PUZZLE_SIZE; i++, j++)
    {
        returnArray[i] = state[i];
    }
    return returnArray;
}

最佳答案

二维数组是对数组的引用的数组。因此,如果您分配 returnArray[i] = state[i],则只需使 returnArray[i] 引用 state[i]< 的同一个数组即可 指的是。因此,修改 returnArray[i][j] 将修改 state[i] 的第 j 个元素。您还必须创建“行”的深拷贝,例如:

private int[][] copyBoard(int[][] state)
{
    int[][] returnArray = new int[rows][columns];
    for (int i = 0, j = 0; i*j < PUZZLE_SIZE; i++, j++)
    {
        // deep copy of row:
        returnArray[i] = Arrays.copyOf(state[i], state[i].length);
    }
    return returnArray;
}

查看this short write-up on 2D arrays ,它应该可以让您更好地了解这里发生的情况。特别是这个小图像,它表示 int nums[][] = new int[5][4] (尽管它在上下文中更有意义):

enter image description here

<小时/>

顺便说一句,你的循环逻辑对我来说看起来有点奇怪;即使数学恰好适合您的情况,这样做会更清楚一点:

for (int i = 0; i < rows; i++)

或者更一般地说:

for (int i = 0; i < returnArray.length; i++)

当然,这些假设 state.length == rows;但你明白了。

关于Java 改变二维数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23051882/

相关文章:

javascript - 如何使用 javascript 在数组对象变量中使用 foreach 循环

java - Android读取文本文件并拆分

c++ - 重载运算符以转置数组

python - Numpy:将矩阵元素与矩阵数组相乘

c - 结构数组,无法使用

java - 将 RDF .ttl 文件合并到一个文件数据库中 - 过滤并仅保留所需的数据/三元组

java - ArrayList 的自定义 Contains 方法

java - 执行variableOfTypeA+=variableOfTypeB时出现奇怪的类型转换

java - Android Studio 下的外部库依赖

java - 如何初始化嵌套数组