当我尝试将一个双精度数组添加到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}}
用于需要该类型输入的另一个类。请帮忙! :)
答案 0 :(得分:3)
不要做
System.out.println(vok);
待办事项
int i = 0;
for (double[] arr : vok) {
System.out.println("vok_" + i++ + " = " + Arrays.toString(arr));
}
您的问题是您(间接)调用toString()
的{{1}},这会产生double[]
之类的字符串而不是内容。
所以你的代码是正确的,并做你想做的事情。你所犯的错误就是你如何在控制台上呈现数据。
答案 1 :(得分:1)
而不是写
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的答案,他只是在几分钟内打败了我,我想发布我所做的事情。