0

結果の文字列 ArrayList を調べる次の for ループがあります。文字列内の各項目は「::」で区切られています。

ArrayList<String> resultsArray = MyClass.results;
        Integer numPoints = resultsArray.size();

        for (int i =0;i<numPoints;i++){
            String[] pointDetails = resultsArray.get(i).split("::");
            String pointName = pointDetails[0];
            String pointDescription = pointDetails[1];
            String coordinates = pointDetails[2];

        //Turn coordinates into geopoints
            String coord[] = coords.split(",");
            Integer  lng= (int) (Double.valueOf(coord[0]) * 1000000);
            Integer lat = (int)(Double.valueOf(coord[1])*1000000);
            GeoPoint gPoint = new GeoPoint(lng,lat);


         arrayPointName = new ArrayList <String>();
         arrayPointDescription = new ArrayList <String>();
         arrayPointCoords=new ArrayList<GeoPoint>();
         arrayPointName.add(pointName);
         arrayPointDescription.add(pointDescription);
     arrayPointCoords.add(gPoint);
          }

最初の文字列 ArrayList に 20 個のポイントがあることを知っており、これを確認するためにそのサイズを出力しました。しかし、arrayPointName などの新しい arraylists を印刷すると、1 つのポイントしか含まれません。これがなぜなのか、何か考えはありますか?

4

2 に答える 2

7

このコードを見てください:

arrayPointName = new ArrayList <String>();
arrayPointDescription = new ArrayList <String>();
arrayPointCoords=new ArrayList<GeoPoint>();

これら 3 つのステートメント (ArrayList変数への新しい空の参照の割り当て)は、ループの反復ごとに実行されます。

代わりに、ループの前に来る必要があります。変数を 1 回だけ初期化し (3 つのリストを作成)、反復ごとに新しい項目を追加する必要があります。

補足として、このように複数のコレクションを設定することは、通常は悪い考えです。通常は、関連するデータ (この場合は名前、説明、座標) をカプセル化する単一の型を作成してから、その型の項目の単一のコレクションを作成することをお勧めします。これは通常、作業がはるかに簡単です。

于 2013-04-19T15:01:24.093 に答える