当我尝试将双精度数组添加到ArrayList中时,我遇到了问题。
ArrayList<double[]> vok = new ArrayList<double[]>();
我有问题的方法是:
public void onSensorChanged(SensorEvent e) {
if(e.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){
double[] temp = new double[3] ;
double x = e.values[0];
temp[0]=x;
double y = e.values[1];
temp[1]=y;
double z = e.values[2];
temp[2]=z;
vok.add(temp);
System.out.println(vok);
}
当我在调试中悬停在temp上时,它会显示正确的值,例如
temp = [40.55999755859375, -20.100000381469727, -28.260000228881836]
我想在数组中,但是当它被添加到"vok"时,我最终在数组中使用像[D@419aeb28]这样的符号(十六进制?)。我试过改变我添加元素到vok = Arrays.asList(temp)和改变相应类型的方法,但我仍然有同样的问题。我不确定是否有比我现在使用的更好的方法,但我已经研究了一整天,这是我得到的最接近的方法。我的最终目标是将值存储为:
Double[][] vee = {{0.4222307801246643,-0.12258315086364746,-0.2996482849121094},
{-0.4222307801246643,-0.06810164451599121,0.1498241424560547},
{-0.1089627742767334,0.027240753173828125,0.23154544830322266},
{0.0,0.16344404220581055,0.04086112976074219}}
用于需要该类型输入的另一个类。请帮助!:)
不要做
System.out.println(vok);
int i = 0;
for (double[] arr : vok) {
System.out.println("vok_" + i++ + " = " + Arrays.toString(arr));
}
你的问题是,你(间接)调用double[]
的toString()
,这导致字符串像[D@419aeb28]
,而不是它的内容。
所以你的代码是正确的,并且做了你想做的事情。你错的只是你在控制台上显示数据的方式。
不写
System.out.println(vok);
你可以这样写:
Iterator<double[]> e = vok.iterator();
while (e.hasNext())
{
double[] array = e.next();
// You can structure the output of the printing in whatever way makes sense for you
System.out.print(Arrays.toString(array));
}
这与jlordo的回答类似,他只是比我早了几分钟,我还是想把我所做的发布出来。