2012-02-07 11 views
0

どのようにaString変数をインデックスしますか?これまでのところ、私は使用しようとしています:String変数をどのように索引付けしますか?

... 
    private GeoPoint points[]; 
    int counter = 0; 
    ... 
    counter ++; 
    String[] RowData = line.split(","); 
    longitude = RowData[0]; 
    latitude = RowData[1]; 
    Double lat = new Double(latitude); 
    Double lng = new Double(longitude); 
    points[counter] = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)); 
    ... 
    for(int i=0; i < pointsCounter-1; i++) { 
    geopoint1 = points[i]; 
    geopoint2 = points[i+1]; 
    } 
    ... 

私は上記を強制するたびに強制的に閉じます - 任意のアイデア?おかげさまで

私が実際にやろうとしていることは、地図のオーバーレイにパスを描くことです。すべてのジオポイントを取得して、とても素敵な点線を描くことができます。地点aから地点bまで、地点cから地点dまでのように、以前のジオポイントを記録する方法を見つけようとしているので、それを使って 'bからc'へ行くことができます。私はこれを行うために 'カウンター' intを使用してポイントのインデックスを使用しようとしています。

私がしようとすると、インデックス「ポイント」していない場合は、すべてが正常に動作しますが、前述のように、私は点線を取得します。

私は、これは理にかなって願っています - 私はnumptyのビットとして出くわすならば(私はおそらくだが!)私は、過去の日かそこらのためのサークルでラウンド申し訳ありません予定されています。ここ

は、より詳細にコードです。事前に

try { 
     String line; 
     while ((line = reader.readLine()) != null) { 

      counter ++; 

     String[] RowData = line.split(","); 
     longitude = RowData[0]; 
     latitude = RowData[1]; 

     Double lat = new Double(latitude); 
     Double lng = new Double(longitude); 

     points[counter] = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)); 

     for(int i=0; i < pointsCounter-1; i++){ 

     geopoint1 = points[i]; 
        geopoint2 = points[i+1]; 

     p1 = new Point(); 
     p2 = new Point(); 
     path = new Path(); 

     Projection projection = mapv.getProjection(); 
     projection.toPixels(geopoint1, p1); 
     projection.toPixels(geopoint2, p2); 

     path.moveTo(p2.x, p2.y); 
     path.lineTo(p1.x,p1.y); 

     canvas.drawPath(path, mPaint); 

     } 

     } 

    } 
    catch (IOException ex) { 
     // handle exception 
    } 

感謝

+1

強制終了する行はありますか?例外は何ですか? –

+0

'line'はどこに設定されていますか? – Vlad

+0

まず、すべてのコードをtry/catch文で囲み、キャッチしたExceptionを記録する必要があります。 – helios

答えて

0

あなたpointsCounterはおそらくそれを、points.lengthイマイチするカウントアップされますか?あなたのループのポイント[i + 1]が存在しない配列インデックスにアクセスしていることを意味します - これはあなたの問題です - ループを正しく取得してください...

1

StringCharacterなくStringを返しcharAtcharAt

String x = "abcde" 
x.charAt(0) // 'a' 
x.charAt(4) // 'b' 

注意。

0

あなたが正しく理解していれば、pointsforループにIndexOutOfBoundsExceptionが表示されています。これは、最後の要素に到達すると、インデックスi+1はもはや有効ではないためです。

for(int i=0; i < pointsCounter-1; i++){ 
    //when i == pointsCounter-1, i+1 == pointsCounter, which is not a valid index 
    geopoint1 = points[i]; 
    if (i == pointsCounter-1) { 

     //there is no second point, so do something special 
    } else { 
     geopoint2 = points[i+1]; 
    } 
    ... 
} 

あなたが望む通りにやるにするために、このロジックをクリアすることができます

for(int i=0; i < pointsCounter-1; i++){ 
    //when i == pointsCounter-1, i+1 == pointsCounter, which is not a valid index 
    geopoint1 = points[i]; 
    geopoint2 = points[i+1]; 
    ... 
} 

ちょうど簡単なチェックを行います。

+0

おかげでピーターにそれの兆候が表示されません)(lat * 1E6)、(int)(lng * 1E6));)強制的に閉じます。私は(ポイント=新しいGeoPoint((int型)(LAT * 1E6)、(int型)(LNG * 1E6を));)を使用する場合には、原因となっている「ポイント」私は変数のインデックスを作成していたという事実であるように思わ作品問題。 – user1060249

関連する問題