java - 二维数组的 ArrayList
问题描述
我创建了一个非常简单的程序来创建一个二维浮点数组的 ArrayList。但是在列表中添加新元素似乎会覆盖或破坏以前的元素。
我做错了什么,应该如何实现这个功能?
import java.util.ArrayList;
public class multiDArrayTest {
public static void main(String[] args) {
float[][] coeff = new float[3][6];
ArrayList<float[][]> basisCoeffs;
basisCoeffs = new ArrayList<float [][]>(2);
coeff[0][0] = 0;
coeff[0][1] = 100;
coeff[0][2] = -50;
basisCoeffs.add(coeff);
coeff[0][0] = 50;
coeff[0][1] = 200;
coeff[0][2] = -400;
basisCoeffs.add(coeff);
System.out.println(basisCoeffs.get(0)[0][0]);
System.out.println(basisCoeffs.get(0)[0][1]);
System.out.println(basisCoeffs.get(0)[0][2]);
//I should get 0 100 -50 50, but i don't? Where does it go ??
System.out.println(basisCoeffs.get(1)[0][0]);
System.out.println(basisCoeffs.get(1)[0][1]);
System.out.println(basisCoeffs.get(1)[0][2]);
}
}
解决方案
发生的情况是您拥有coeff
具有第一个值的数组,将其添加到列表中,一切都很好,但是当您coeff
在将其添加到列表之前再次编辑时,您还编辑了位于列表位置 0 的那个,因为两者都coeff
作为列表位置 0 的元素,它们在 Java 中引用同一个对象。一种选择是创建一个副本,另一种是分别拥有两个数组。另外,由于我观察到您的尺寸是静态的,您可以直接将值添加到指定位置,例如:
import java.util.ArrayList;
public class multiDArrayTest {
public static void main(String[] args) {
ArrayList<float[][]> basisCoeffs = new ArrayList<float [][]>(2);
basisCoeffs.add(new float[3][6]);
basisCoeffs.add(new float[3][6]);
// First values of coeffs
basisCoeffs.get(0)[0][0] = 0;
basisCoeffs.get(0)[0][1] = 100;
basisCoeffs.get(0)[0][2] = -50;
// Second values of coeffs
basisCoeffs.get(1)[0][0] = 50;
basisCoeffs.get(1)[0][1] = 200;
basisCoeffs.get(1)[0][2] = -400;
System.out.println(basisCoeffs.get(0)[0][0]);
System.out.println(basisCoeffs.get(0)[0][1]);
System.out.println(basisCoeffs.get(0)[0][2]);
System.out.println(basisCoeffs.get(1)[0][0]);
System.out.println(basisCoeffs.get(1)[0][1]);
System.out.println(basisCoeffs.get(1)[0][2]);
}
}
推荐阅读
- python - AWS ELB http 有效,但 https 无效
- c++ - 如何从 clang 分析器中排除文件?
- python - Pytorch 收集问题(3D 计算机视觉)
- r - 如何在 R“Scaled_mass_index <- M(L0/Li)^bSMA”中编码这个公式?
- python - .evaluate() 和 sklearn classification_report() 之间的损失和准确率差异
- sql-server - id 从 1 , 2 跳到 1002, 2005, 2006
- java - 如何调整 JPanel 的高度?
- ios - Xcode12:如何停止在我的预览中显示自定义按钮类名
- html - 为什么有时 name="btnI" 不像正确的 google 的“我很幸运”按钮那样工作?
- grep - Grep 多个单词的行和行尾,如果匹配则替换行尾