Как я могу написать функцию, возвращающую глубокую копию трехмерного массива по индексу в Java? - PullRequest
0 голосов
/ 16 мая 2019

В этом задании вы должны внедрить простую систему планирования тура. Данные для доступных туров, каждый с несколькими путевыми точками, приведены статически. Одна путевая точка состоит из значения x и значения y. Я должен написать 2 функции: int getCountOfTours - возвращает количество доступных туров int [] [] createDeepCopyOfTour - возвращает глубокую копию тура по индексу idx

Я выполнил первую функцию, но не понимаю вторую функцию createDeepCopyOfTour

Я хочу понять, как работает вторая функция. Пожалуйста, помогите мне. Огромное спасибо заранее!! Вот мой код:

private static final int[][][] TOUR = new int[][][]{
        {{0, 0}, {4, 0}, {4, 3}, {0, 3}}, 
        {{0, 0}, {3, 0}, {3, 4}, {0, 0}}, 
        {{1, 3}, {3, 2}, {0, 4}, {2, 2}, {3, 1}, {1, 4}, {2, 3}}, 
        {{-2, -1}, {-2, +3}, {4, 3}, {0, 0}} 
    };


public static int[][] createDeepCopyOfTour(int idx) {
        throw new UnsupportedOperationException("Not supported yet.");
//I dont understand about this function.
    }   

1 Ответ

0 голосов
/ 16 мая 2019

Проще говоря, глубокая копия выделяет новую область памяти для хранения дубликата всего, что вы пытаетесь скопировать.В случае глубокого копирования массива вы должны создать новый массив и использовать цикл for для копирования значений из оригинала в новый массив.Цель вашей функции createDeepCopyOfTour, которую я могу собрать, - создать новый массив, содержащий путевые точки обхода указанного индекса в статическом массиве TOUR.

К сожалению, это не так просто, как:

private static final int[][][] TOUR = new int[][][]{
    {{0, 0}, {4, 0}, {4, 3}, {0, 3}}, 
    {{0, 0}, {3, 0}, {3, 4}, {0, 0}}, 
    {{1, 3}, {3, 2}, {0, 4}, {2, 2}, {3, 1}, {1, 4}, {2, 3}}, 
    {{-2, -1}, {-2, +3}, {4, 3}, {0, 0}} 
};


public static int[][] createDeepCopyOfTour(int idx) {
    return TOUR[idx];
}

Приведенное выше описание создаст поверхностную копию и просто вернет ссылку на исходный массив.Чтобы создать глубокую копию, вам нужно будет создать новый массив, используя ключевое слово new, которое выделит новую память для всего, что вы хотите дублировать, а затем используйте цикл for для копирования значений в новый массив.К счастью для вас, это просто, так как мы знаем, что для каждой координаты путевой точки есть только две оси, поэтому вам нужна только одна ось для цикла, чтобы скопировать значения.

private static final int[][][] TOUR = new int[][][]{
    {{0, 0}, {4, 0}, {4, 3}, {0, 3}}, 
    {{0, 0}, {3, 0}, {3, 4}, {0, 0}}, 
    {{1, 3}, {3, 2}, {0, 4}, {2, 2}, {3, 1}, {1, 4}, {2, 3}}, 
    {{-2, -1}, {-2, +3}, {4, 3}, {0, 0}} 
};


public static int[][] createDeepCopyOfTour(int idx) {
    int tour[][] = new int[TOUR[idx].length][2];
    for (int i = 0; i < TOUR[idx].length; i++)
    {
        tour[i][0] = TOUR[idx][i][0];
        tour[i][1] = TOUR[idx][i][1];
    }

    return tour;
}
...