Как я могу глубоко скопировать 3D-массив объектов с циклами for в Java? - PullRequest
0 голосов
/ 07 мая 2020

Я создал несколько объектов BufferedImage и сохранил их в трехмерном массиве. Чтобы переместить мои объекты по массиву, мне нужно создать глубокую копию полного 3D-массива и после ... только после того, как я смогу изменить значения моего скопированного массива, чтобы вернуть его.

Когда я создаю первые два массива объектов ( new BufferedImage [temp1.length] [] [] и новый BufferedImage [temp1 [i] .length] [] ), чтобы перебирать их , идентификаторы хранилища полностью отличаются от идентификаторов массивов, которые я скопировал из .. Пока все хорошо .. (проверено в режиме отладки)

Проблема заключается в том, что после моего последнего нового объекта массива l oop я не знаю, как скопировать собранное значение int k .

Если я установил temp 2 [ i ] [ j ] [ k ] = temp1 [ i ] [ j ] [ k ] .. код принимается, но относится только к сохраненному местоположению идентификатора (малая копия), он не создает новый. (В режиме отладки я вижу изменение идентификатора на тот же идентификатор после создания k ..

Когда я запускаю код, многие местоположения устанавливаются как новые объект ... но эта проблема вызывает несколько значений null в моих местах хранения во время выполнения.

Пробовал использовать new снова ключевое слово, но оно не принято, потому что у меня уже есть количество массивов для 3D-массивов.

Итак ... как правильно написать последний шаг этого кода ..

enter code here

частный BufferedImage [] [] [] микс (BufferedImage [] [] [] temp1) {

BufferedImage [][][] temp2 = new BufferedImage [temp1.length][][];
    for(int i=0 ; i <temp1.length;i++) {


        temp2[i] = new BufferedImage [temp1[i].length][];
        for(int j=0;j<temp1[i].length;j++) {

            temp2[i][j] = new BufferedImage[temp1[i][j].length];
            for(int k=0;k<temp1[i][j].length;k++) {


                // ** before this step..  the storage ID of temp2 = a different one (stil good)

                temp2[i][j][k] = temp1[i][j][k];

                // ** after this step..  the storage ID of temp2 = the same as temp 1 (not good)
            }
        }
    }
    return temp2;

}

...