gpt4 book ai didi

java - 方法修改方法超出范围

转载 作者:行者123 更新时间:2023-11-30 06:26:33 26 4
gpt4 key购买 nike

我今天有一个非常有趣的问题。我正在尝试修改一个数组,但方法修改了另一个甚至没有调用的数组。

a)引起问题的部分方法

public static void place2(String output, int position,furniture furniture_array[], char room_grid[][]) {

int i=0;
int j=0;

furniture_array[position].setXY(i, j);
char grid1[][] = room_grid;
char grid2[][] = room_grid;
char grid3[][] = room_grid;
char grid4[][] = room_grid;
pasteToArray(i, j, grid1, furniture_array[position]);
}

b)粘贴到数组

这是一个非常简单的方法,它接收 input_array 并且在这个数组中它将传递一个对象值数组。

public static char[][] pasteToArray(
int x, int y, char input_array[][], furniture furniture_to_be_placed) {

char[][] result=input_array;

for (int i = 0; i <= furniture_to_be_placed.getSize(); i++) {
for (int j = 0; j <= furniture_to_be_placed.getSize(); j++) {
result[x + i][y + j] = furniture_to_be_placed.furn_grid[i][j];
}
}
return result;
}

我的问题是什么?

  1. 为什么输入 A、B 和结果 C 的方法修改 D? (亲戚名)

我自己已经做了什么来解决它:-

  1. 调试代码 - 找到导致问题的方法
  2. 25 分钟的无助哭泣包括咒骂
  3. 检查全局变量
  4. 将所有方法输入重命名为相对中性的名称

谁能帮我解决这个问题?

最佳答案

grid1、grid2、grid3、grid4 都是对同一个二维数组的引用。改变一个值会改变所有值。

这段代码...

char grid1[][] = room_grid;
char grid2[][] = room_grid;
char grid3[][] = room_grid;
char grid4[][] = room_grid;

不会创建 room_grid 的 4 个副本,而是对同一 block 内存创建 4 个不同的引用。

关于java - 方法修改方法超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com