java - 2 "linked"对象

标签 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 类没有任何静态变量或方法

最佳答案

我怀疑问题出在这里:

solvedSudoku.setMatrix(unsolvedSudoku.getMatrix());

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

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

我将把这个问题留给你来解决,因为你现在已经有了解决这个问题的工具。

关于java - 2 "linked"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438277/

相关文章:

java - 文件未重命名

java - Cassandra查询语言无法读取Astyanax插入的数据

javascript - 有没有办法从后面调用 .jsp 中的函数?

c# - 从列表中获取对象名称

php - 如何从foreach循环php中的对象数组中删除对象

java - 对具有相同特定实例变量的对象 [在对象数组内] 的实例变量求和

php - 可捕获的 fatal error : Object of class dayDaytimeFields could not be converted to string

java - 获取一个 BroadcastReceiver 使其生命周期比 Activity 长

java - 为spring data mongo指定多个基础包

c++ - 在新变量中存储类实例会导致奇怪的行为(Arduino Serial)