2012-02-07 2 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]; 
    } 
    ... 

나는 위의 테스트를 할 때마다 강제로 닫힌다. 감사합니다. .

불투명 한 질문에 대해 유감스럽게 생각합니다. 실제로 실제로하려는 것은지도 오버레이에 경로를 그립니다. 즉, 모든 멋진 geoPoints를 얻을 수있어서 아주 좋은 점선을 그릴 수 있습니다. 점 '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 문으로 묶고 catch 된 Exception을 기록해야합니다. – helios

답변

0

귀하의 pointsCounter 아마 밤은, points.length까지 계산합니까? 루프에있는 포인트 [i + 1]이 존재하지 않는 배열 인덱스에 액세스하고 있다는 것을 의미합니다. 루프가 올바른지 확인하십시오.

1

String의 특정 문자를 사용하려면 Character 아닌 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

고마워 피터 - 내 문제는 for 루프가 아니었고, 매번 시도하고 사용할 때마다 (점 [counter] = 새로운 GeoPoint ((int) (lat * 1E6), (int) (lng * 1E6)) 강제로 닫습니다. 내가 사용하는 경우 (points = new GeoPoint ((int) (lat * 1E6), (int) (lng * 1E6));) 그것이 작동하는 것처럼 보이도록 변수 'points'를 인덱싱하는 것으로 보인다. 문제. – user1060249

관련 문제