我有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类没有任何静态变量或方法
答案 0 :(得分:5)
我怀疑问题出现在这里:
solvedSudoku.setMatrix(unsolvedSudoku.getMatrix());
您只是复制对同一个数组实例的引用,而不是实际复制其内容。要复制数组,可以使用System.arraycopy()
。 Arrays
实用程序类还有一些用于复制数组的有用方法。
我假设名字"矩阵"这是一个二维数组 - 在这种情况下,它不会像复制外部维度那么简单,因为元素仍将是对相同内部数组的引用。您需要将每个内部数组单独复制到一个新的外部数组中。
我会留给你解决这个问题,因为你现在有了它的工具。