Глубокая копия 2D-массива со всеми элементами - PullRequest
4 голосов
/ 25 мая 2011

Я делаю основную игру с использованием двумерного массива (4x4), в котором элементы (типа объекта со значениями от 1 до 16) необходимо переключать, чтобы достичь определенного целевого состояния, это состояние должно сравниваться с текущим состояниемотсюда необходимость копирования.

Пока у меня есть:

public void cloneArray() throws CloneNotSupportedException
    {
        ClassName copy = (ClassName)super.clone();
        copy.tiles = (Tile[][]) tiles.clone();
    }

Кажется ли это правильным, или я что-то упустил?

1 Ответ

3 голосов
/ 25 мая 2011

Вам нужно будет сделать еще один шаг и сделать так:

    ClassName copy = (ClassName)super.clone();
    copy.tiles = (Tile[][]) tiles.clone();
    for(int i = 0; i < copy.tiles.length; i++) {
        copy.tiles[i] = (Tile[]) tiles[i].clone();
    }

Причина в том, что clone делает поверхностную копию массива верхнего уровня, который содержит ссылки на другие массивы.

...