@Koshkasobaka

Как работает метод clone() в java?

Здравствуйте. У меня есть несколько классов, содержащих методы transform(int[] board), меняющих по-разному массив. Они объединены одним интерфейсом (Transform). В Main создаю массив из объектов Transform и с помощью цикла хочу показать различные изменения массива, но чтобы это было наглядно, хочу чтобы изменения не накладывались друг на друга. Наставник дал мне подсказку, что надо использовать метод clone(). Я пробую передавать методам клон массива и тут начинается непонятное: первый метод вообще никак не изменяет массив. А дальше идут трансформации, которые наслаиваются друг на друга. Я не понимаю, как здесь правильно воспользоваться clone(), помогите пожалуйста!!
Transformer[] transformers = new Transformer[5];
        transformers[0] = new SwapBoardRows();
        transformers[1] = new SwapBoardColumns();
        transformers[2] = new SwapRegionsHorizontally();
        transformers[3] = new SwapRegionsVertically();
        transformers[4] = new SwapRowsAndColumns();

        for (int i = 0; i < transformers.length; i++) {
            transformers[i].transform(board.clone());
            for (int j = 0; j < board.clone().length; j++) {
                for (int k = 0; k < board.clone()[j].length; k++) {
                    System.out.print(board.clone()[j][k] + " ");
                }
                System.out.println();
            }
               System.out.println();
}
  • Вопрос задан
  • 358 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Kot1que
пишу на жаве
Каждый вызов clone() создаёт копию объекта. Следовательно вы на каждой итерации создаёте кучу клонов объекта board. Решение – вызвать clone() один раз, поместить результат в переменную и дальше с ней выполнять действия.

for (int i = 0; i < transformers.length; i++) {
            int[] clonedBoard = board.clone();
            transformers[i].transform(clonedBoard);
            for (int j = 0; j < clonedBoard.length; j++) {
                for (int k = 0; k < clonedBoard[j].length; k++) {
                    System.out.print(clonedBoard[j][k] + " ");
                }
                System.out.println();
            }
      System.out.println();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы