如果将int [] []添加到列表中,则不会添加数组的值,而是数组的位置。如何将数组的值添加到列表中。这是代码(这只是一个示例,可能有一些小错误):

public class Main {
    int[][] matrix = new int[2][2];
    List<int[2][2]> matrixList = new ArrayList<>();

    public static void main(String[] args) {
        for(int i = 0; i < 4; i++){
            matrixList.add(matrix);
            matrix = matrixCalc(matrix);
        }

        for(int i = 0; i < 4; i++) {
            System.out.println(Arrays.deepToString(matrixList.get(i)));
        }
      public int[][] matrixCalc(int[][] m){
        //do various calculations with m
        ...

        return m;
      }
   }
}


我希望输出具有由calculate方法计算的不同矩阵。

我想要得到的输出示例:

{{0,1}{5,7}}
{{2,0}{2,4}}
{{8,1}{4,8}}
{{3,3}{7,9}}


输出我会得到这种方式(错误!)

  {{3,3}{7,9}}
  {{3,3}{7,9}}
  {{3,3}{7,9}}
  {{3,3}{7,9}}

最佳答案

编辑:OP的评论后,我删除了我的整个答案(you can still find a screenshot of it here;或查看编辑的历史记录)。


  如果我没记错的话,您可以向方法matrixCalc发送一个空数组?对于计算方法,我需要一个矩阵,其值与刚刚放在堆栈顶部的值相同。


在这种情况下,虽然问题仍然与matrix相同,但还是有些不同,因此我们必须对此进行更改。要将数据从一个2D数组复制到一个新的(带有新引用)数组,我们应该制定一个单独的复制方法。在Java中,一维数组有Arrays.copyOf方法(或System.arraycopy),但是对于2D数组,您应该自己创建一个方法。因此,您的代码将如下所示:

public class Main {
    int[][] previousMatrix = new int[2][2];
    List<int[2][2]> matrixList = new ArrayList<>();

    public static void main(String[] args) {
        for(int i = 0; i < 4; i++){
            int[][] matrix = matrixCalc(previousMatrix);
            matrixList.add(matrix);
            previousMatrix = copy2dArray(matrix);
        }

        for(int i = 0; i < 4; i++) {
            System.out.println(Arrays.deepToString(matrixList.get(i)));
        }
    }

    public int[][] matrixCalc(int[][] m){
        //do various calculations with m
        ...

        return m;
    }

    private int[][] copy2dArray(int[][] original){
        int[][] copy = new int[original.length][];
        for(int i = 0; i < original.length; i++){
            copy[i] = Arrays.copyOf(original[i], original[i].length);
        }
        return copy;
    }
}


或者,您可以在matrixCalc方法的开头创建一个新的2D数组,然后填充并返回它,而不是给定的参数。但是,由于我不知道您在matrixCalc方法中执行的是哪种计算,因此我无法真正给出一个示例。它看起来像这样:

public int[][] matrixCalc(int[][] m){
    int[][] n = new int[2][2];
    //do various calculations with m,
    //but save the result in n
    ...

    return n;
}

10-01 13:28
查看更多