Копирование элементов массива в многомерных массивах в Java

Так что у меня возникли некоторые проблемы с этим на Яве. Этот метод должен принимать два строковых массива, которые являются многомерными. Предполагается, что этот метод возвращает массив строк a copy. Теперь эти два массива, отправляемые в метод copy, будут иметь случайно сгенерированные длины внутри массивов. Я пытаюсь увидеть, является ли array2 меньше, чем array, и если это так, то array будет присвоена длина array2, и я хочу скопировать элементы из array в array2.Если array2 больше, чем array, то я хотел бы скопировать элементы из array в array2, и тогда оставшиеся места в array2 будут заполнены *. Теперь проблема в том, что я продолжаю получать ошибки во время выполнения с out of bounds для индекса. Именно линии, которые я указал с двойными звездочками ниже(внутри для петель), которые дают мне проблемы. Что я могу сделать, чтобы решить эту проблему.

    public static String[][][] copy(String[][][] array, String[][][] array2){
    if(array2.length < array.length){
        array = new String[array2.length][array2.length][array2.length];
        for(int i = 0; i < array2.length; i++){
            for(int j = 0; j < array2[i].length; j++){
                for(int k = 0; k < array2[i][j].length; k++){
                    **array2[i][j][k] = array[i][j][k];**
                }
            }
        }
        return array2; 
    }
    if(array2.length > array.length){

        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array[i].length; j++){
                for(int k = 0; k < array[i][j].length; k++){
                    **array2[i][j][k] = array[i][j][k];**
                }
            }
        }
        for(int i = array.length - 1; i < array2.length; i++){
            for(int j = array[i].length - 1; j < array2.length; j++){
                for(int k = array[i][j].length - 1; k < array2.length; k++){
                    array2[i][j][k] = "*";
                }
            }
        }
        return array2;
    }
    return array;
}

1 ответ

  1. Предполагается, что каждое измерение массива имеет одинаковый размер.
    Но вы не можете даже предположить, что два родственных массива имеют одинаковый размер.
    Я имею в виду, что array = new String[array2.length][array2.length][array2.length];это чушь и, по крайней мере, в двух отношениях.
    Вы, вероятно, хотите иметьarray2 = new String[array.length][][], потому что если вы переназначитеarray, вы просто скопируете nulls вокруг. И для длин других измерений вы должны сделать те же сравнения и изменения размеров, особенно если вы не переназначили array2. Если вы сделали, то вы должны создать массивы подуровня заново в любом случае.