如何在Java中复制二维数组

时间:2019-06-09 16:52:57

标签: java arrays multidimensional-array

我刚刚开始学习Java。任务之一是创建一个函数来创建反向二维数组,例如,如果输入数组为{1,2}{3,4},则新数组必须为{4,3}{2,1}。下面的代码是我创建的方法。问题是旧数组d与c一起受到循环的影响,因此,在这种情况下,它将数组的一半值复制到c中,而且还替换了d的后一半,因此c的后一半只是一个基本上,在示例情况下,镜像的前半部分最终都将c和d像这样:{4,3}{3,4}。克隆后我检查了c==dc.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;
}

0 个答案:

没有答案