2012-02-07 3 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'. Я пытаюсь использовать индекс точек, используя для этого 'counter' int.

Если я не пытаюсь индексировать «точки», все работает нормально, но, как уже упоминалось, я получаю пунктирную линию.

Надеюсь, это имеет смысл - я крутился кругами в течение прошедшего дня или около того, извините, если я столкнулся с немногочисленным числом (хотя, наверное, я!).

Узнать здесь код более подробно;

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 и зарегистрировать выбранное исключение. – helios

ответ

0

Ваш pointsCounter, вероятно, считая до points.length, не правда ли? Это означает, что точки [i + 1] в вашем цикле имеют доступ к индексу массива, который не существует, - и это ваша проблема - получите петлю вправо ...

1

Если вы хотите, чтобы конкретный символ String использовал charAt

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

Примечание charAt возвращает Character и не String.

0

Если вы правильно поняли, что получаете IndexOutOfBoundsException в своем for петле над 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]; 
    ... 
} 

Просто выполнить простую проверку:

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]; 
    } 
    ... 
} 

Вы можете очистить эту логику, чтобы сделать это делать, как вы хотите.

+0

Спасибо Peter - моя проблема не была циклом for, это был тот факт, что каждый раз, когда я пытаюсь использовать (points [counter] = new GeoPoint ((int) (lat * 1E6), (int) (lng * 1E6));) это сила закрывается. Если я использую (point = new GeoPoint ((int) (lat * 1E6), (int) (lng * 1E6));) он работает, поэтому мне кажется, что я индексирую переменную «точки», которая вызывает проблема. – user1060249