2个“链接”对象

时间:2012-02-24 21:25:23

标签: java object

我有2个单独的对象,分别创建,但是当我改变其中一个时,另一个也会改变。

这是对象创建代码:

private sMap unsolvedSudoku = new sMap();
private sMap solvedSudoku = new sMap();
private sMap userSudoku = new sMap();

algorithm alg = new algorithm(unsolvedSudoku);

以下是更改一个对象的代码:

//Generate a new sudoku
alg.generateFullList(); // - This changes unsolvedSudoku
solvedSudoku.setMatrix(unsolvedSudoku.getMatrix()); // - This basically copies an array of numbers from unsolvedSudoku to solvedSudoku.
new algorithm(solvedSudoku).printMap(); //  This just prints out the array of numbers
alg.removeRandomNumbers(level); // This removes random numbers from unsolvedSudoku
new algorithm(solvedSudoku).printMap(); // this prints out the array again.

第一个printMap和第二个printMap是不同的,但它们不应该(至少据我所知)。这是为什么?此外,sMap类没有任何静态变量或方法

1 个答案:

答案 0 :(得分:5)

我怀疑问题出现在这里:

solvedSudoku.setMatrix(unsolvedSudoku.getMatrix());

您只是复制对同一个数组实例的引用,而不是实际复制其内容。要复制数组,可以使用System.arraycopy()Arrays实用程序类还有一些用于复制数组的有用方法。

我假设名字"矩阵"这是一个二维数组 - 在这种情况下,它不会像复制外部维度那么简单,因为元素仍将是对相同内部数组的引用。您需要将每个内部数组单独复制到一个新的外部数组中。

我会留给你解决这个问题,因为你现在有了它的工具。