我有 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 类没有任何静态变量或方法
最佳答案
我怀疑问题出在这里:
solvedSudoku.setMatrix(unsolvedSudoku.getMatrix());
您只是复制对同一数组实例的引用,而不是实际复制其内容。要复制数组,可以使用 System.arraycopy()
。 Arrays
实用程序类还具有一些用于复制数组的有用方法。
我从名称“matrix”假设这是一个二维数组 - 在这种情况下,它不会像复制外部维度那么简单,因为元素仍然是对相同内部数组的引用。您需要将每个内部数组单独复制到新的外部数组中。
我将把这个问题留给你来解决,因为你现在已经有了解决这个问题的工具。
关于java - 2 "linked"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438277/