向数组列表添加双精度数组会给我带来奇怪的(十六进制?)值- java



当我尝试将双精度数组添加到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的回答类似,他只是比我早了几分钟,我还是想把我所做的发布出来。

相关内容

  • 没有找到相关文章

最新更新