如果将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;
}