2 "связанных" объекта - PullRequest
       1

2 "связанных" объекта

0 голосов
/ 25 февраля 2012

У меня есть 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 Ответ

5 голосов
/ 25 февраля 2012

Я подозреваю, что проблема здесь:

solvedSudoku.setMatrix(unsolvedSudoku.getMatrix());

Вы просто копируете ссылку на тот же экземпляр массива, а не копируете его содержимое.Чтобы скопировать массив, вы можете использовать System.arraycopy().В служебном классе Arrays также есть несколько полезных методов для копирования массивов.

Я предполагаю, что из названия "matrix" это 2d массив - в этом случае он небыть простым, просто скопировав внешнее измерение, потому что элементы все равно будут ссылками на одни и те же внутренние массивы.Вам нужно будет индивидуально скопировать каждый внутренний массив в новый внешний массив.

Я оставлю это на ваше усмотрение, чтобы выяснить это, так как теперь у вас есть инструменты для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...