将一个双精度数组添加到数组列表给了我奇怪的(十六进制?)值 - java

时间:2013-05-12 23:13:43

标签: java arrays arraylist multidimensional-array

当我尝试将一个双精度数组添加到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}}

用于需要该类型输入的另一个类。请帮忙! :)

2 个答案:

答案 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的答案,他只是在几分钟内打败了我,我想发布我所做的事情。