Как скопировать 2-мерный массив в Java - PullRequest
0 голосов
/ 09 июня 2019

Я только начал изучать Java. Одной из задач было создание функции для создания обратного 2-мерного массива, например, если входной массив был {1,2}{3,4}, новый массив должен быть {4,3}{2,1}. Код ниже - это метод, который я создал. Проблема в том, что на старый массив d влияет цикл вместе с c, поэтому в этом случае он копирует половину значений в c, но также заменяет вторую половину d, поэтому вторая половина c является просто зеркальное отображение первой половины, в основном, в этом примере и c, и d будут в итоге такими: {4,3}{3,4}. Я проверил c==d и c.equals(d) после клонирования, оба показывают false.

Также я попробовал использовать Arrays.copy, результат был тот же. Кроме того, я хочу, чтобы метод работал с массивами, которые могут иметь свои подмассивы различной длины, например, {1,2}{3}{4,5}, и я не знаю, будет ли он работать с такими массивами.

static int[][] reversematrix(int[][] d) {
  int[][] c = d.clone();
    for (int i = d.length-1, x = 0; i >= 0; x++, i--) {
       for (int j = d[i].length-1, y = 0; j>=0; y++, j--) {
          c[x][y] = d[i][j];
       }
    }
  return c;

Можете ли вы сказать мне, как сделать d (массив импульсов) незатронутым методом / циклом? Я думаю, что проблема заключается в копировании, поэтому я хотел бы знать правильный способ копирования 2D-массива в новый объект, но если он находится в другом месте, пожалуйста, скажите мне, что это такое.

UPD: благодаря @sascha решение было найдено. Вот код, если кому-то интересно:

static int[][] reversematrix(int[][] d) {
    int[][] c = new int[d.length][];
    for (int i = d.length-1, x = 0; i >= 0; x++, i--) {
        c[x] = new int[d[i].length];
        for (int j = d[i].length-1, y = 0; j>=0; y++, j--) {
        c[x][y] = d[i][j];
   }
}
    return c;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...