我有两个这样创建的数组:
public int GameBoard[][] = new int[30][14];
public int DirectionMap[][] = new int[30][14];
然后我像这样初始化数组:
for (int i = 0; i < GameBoard.length; i++)
{
for (int j = 0; j < GameBoard[i].length; j++)
{
GameBoard[i][j] = 0;
}
}
... //Same for DirectionMap
当我运行函数时:
DirectionMap = AStar(GameBoard);
为了渲染我的单位将遵循的寻路 map ,DirectionMap 被正确设置为基于我的 GameBoard 生成的值。但是 GameBoard 也设置为结果。当我在 Eclipse 中以 Debug模式运行应用程序时,我可以看到两个数组的 ID 相同。出于某种原因,它们似乎指向内存空间。我的 AStar 函数根本不修改 GameBoard 数组。对它的唯一引用是 int retVal[][] = GameBoard;
我的函数原型(prototype)是 public int[][] AStar(int[][] Board);并返回 int[][] retVal。
我不知道为什么我不能在没有 GameBoard 跟随的情况下更改 DirectionMap 的值。我以前从未遇到过这样的问题。
非常感谢任何想法。感谢您的帮助。
public int[][] AStar(int[][] Board)
{
int retVal[][] = Board;
//Initialize All Needed Lists
int width = retVal.length;
int height = retVal[0].length;
int goalX = 0;
int goalY = 0;
//List<Node> fieldInfo = new ArrayList<Node>();
Node fieldArray[][] = new Node[width][height];
for (int i = 0; i < fieldArray.length; i++)
{
for (int j = 0; j < fieldArray[i].length; j++)
{
fieldArray[i][j] = new Node(i, j);
if (retVal[i][j] == 2)
{
fieldArray[i][j].setOpen(1);
fieldArray[i][j].setDirection(10); //Set as target
goalX = i;
goalY = j;
}
if (retVal[i][j] == 1)
{
fieldArray[i][j].setOpen(0);
fieldArray[i][j].setDirection(9); //Set as wall
}
}
}
//Add AStar Algorithm Here
for (int i = 0; i < fieldArray.length; i++)
{
for (int j = 0; j < fieldArray[i].length; j++)
{
if (fieldArray[i][j].getDirection() == 0)
{
//Occurs when node was never reached
int dX = i - goalX;
int dY = j - goalY;
if (dX < 0)
dX = -dX;
if (dY < 0)
dY = -dY;
if (dY > dX)
fieldArray[i][j].setDirection(1);
else
{
if (i > goalX)
fieldArray[i][j].setDirection(7);
if (i < goalX)
fieldArray[i][j].setDirection(3);
}
}
}
}
for (int i = 0; i < fieldArray.length; i++)
{
for (int j = 0; j < fieldArray[i].length; j++)
{
retVal[i][j] = fieldArray[i][j].getDirection();
}
}
return retVal;
}
最佳答案
请记住,当您将对象传递给方法时,您实际上是在传递引用的副本。因此,当您初始化 retVal[][] = Board;
时,您实际上使用另一个引用 retVal
指向 Board
。您将返回对 DirectionMap
的相同引用。因此 Board
和 DirectionMap
的 ID 相同。考虑 array copy相反。
关于java - Eclipse - Java 数组 ID 值相等。无法独立更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9854444/