-2

double の配列を 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);

    }

デバッグで一時にカーソルを合わせると、正しい値が表示されます。

温度 = [40.55999755859375、-20.100000381469727、-28.260000228881836]

配列に入れたいのですが、「vok」に追加すると、[D@419aeb28] のような記号が配列 (hex?) に含まれます。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 に答える