Я только начал изучать 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;
}