我刚刚开始学习Java。任务之一是创建一个函数来创建反向二维数组,例如,如果输入数组为{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;
}