-2

当我尝试将双精度数组添加到 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 上时,它会显示正确的值,例如

温度 = [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}}

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

4

2 回答 2

3

不要做

System.out.println(vok);

int i = 0;
for (double[] arr : vok) {
    System.out.println("vok_" + i++ + " = " + Arrays.toString(arr));
}

您的问题是您正在(间接)调用toString()a double[],这会导致字符串喜欢[D@419aeb28]而不是它的内容。

因此,您的代码是正确的,并且可以执行您希望它执行的操作。您所错的只是您在控制台上呈现数据的方式。

于 2013-05-12T23:20:40.263 回答
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 的回答,他只是比我早了几分钟,我还是想发布我所做的事情。

于 2013-05-12T23:26:13.440 回答