Ger*_*rak -1 java arrays object
我在一个数组中的对象有一些问题,作为一个对象,而不是按预期分开.例如
boardArray = new object[4];
workingBoardArray = new object[4];
boardArray[0] = new board(boardA);
boardArray[1] = new board(boardB);
boardArray[2] = new board(boardC);
boardArray[3] = new board(boardD);
int selectedBoard = selectBoard(boardArray);
workingBoardArray[0] = boardArray[selectedBoard];
workingBoardArray[1] = boardArray[selectedBoard];
workingBoardArray[2] = boardArray[selectedBoard];
workingBoardArray[3] = boardArray[selectedBoard];
workingBoard[0].moveUp();
workingBoard[1].moveRight();
workingBoard[2].moveDown();
workingBoard[3].moveLeft();
Run Code Online (Sandbox Code Playgroud)
此代码创建一组4个板,找到所需的板,将板复制到工作板阵列中,然后将每个工作板移向新的方向.问题是董事会都在一起行动.因此,如果我在workingBoard [0]上执行moveUp(),那么workBoard [1]也会向上移动.有没有办法解决这个问题,我觉得我错过了一些基本的理解或者是一个非常愚蠢的错误.
我也试过使用像这样的复制构造函数
workingBoard[0] = new Board(boardArray[selectedBoard].getBoard);
Run Code Online (Sandbox Code Playgroud)
它检索所有重要的董事会信息并用它创建一个新的董事会,但这似乎不会影响任何事情.任何帮助都会很棒
看看这段代码:
int selectedBoard = selectBoard(boardArray);
workingBoardArray[0] = boardArray[selectedBoard];
workingBoardArray[1] = boardArray[selectedBoard];
workingBoardArray[2] = boardArray[selectedBoard];
workingBoardArray[3] = boardArray[selectedBoard];
Run Code Online (Sandbox Code Playgroud)
这是将所有四个数组元素设置为对同一对象的引用.所以,是的,当您通过调用moveUp()或其他方式修改该对象时,该更改将通过数组中的所有元素可见.
听起来您可能希望每次都创建一个板的副本.根据您的board类型(应Board遵循命名约定),您可能只想实现Cloneable(很可能覆盖该clone()方法)或提供其他类型的复制操作.
您是否了解Java中的引用和对象之间的区别,并且该数组仅包含引用,而不包含对象?(同样,任何变量值都只是一个引用而不是对象.)了解对象在Java中的工作方式非常重要.例如:
StringBuilder a = new StringBuilder();
StringBuilder b = a;
a.append("Foo");
System.out.println(b); // Still prints "Foo"
Run Code Online (Sandbox Code Playgroud)
这里我们有一个 StringBuilder对象,即使有两个变量(a和b),其值引用同一个对象.