2012-06-04 3 views
0

У меня есть строка, как этотОшибка при попытке разобрать строки Удвоить

106.826820,-6.303850,0 

, которые я получаю от разбора документа Google Maps KML. Теперь я хочу разобрать его строку Double это мой код:

public Double getLatitude(){ 
    for(int posisi = GPS_NAME.indexOf(","); posisi > GPS_NAME.length(); posisi++){ 
     TEMP_LAT = "" + GPS_NAME.indexOf(posisi); 
    } 
    GPS_LATITUDE = Double.valueOf(TEMP_LAT); 

    return GPS_LATITUDE; 
} 

public Double getLongitude(){ 
    int posisiakhir = GPS_NAME.indexOf(","); 
    for(int i = 0; i < posisiakhir; i++){ 
     TEMP_LON = "" + GPS_NAME.indexOf(i); 
    } 
    GPS_LONGITUDE = Double.valueOf(TEMP_LON); 

    return GPS_LONGITUDE; 
} 

, но когда я пытаюсь запустить его я получил ошибку, как это enter image description here

может кто-нибудь помочь мне решить мои проблемы> _ <

ответ

2

, а также подтвердить GPS_LATITUDE = Double.valueOf(TEMP_LAT);TEMP_LAT не ню там, где исключение - исключение NullPointerException, а не NumberFormatException.

+0

Извините, Dheeresh, я не могу понять, что вы имеете в виду здесь. Можете ли вы описать это для меня? > _ < – DevYudh

+1

Я хочу сказать, что перед тем, как использовать Double.parseDouble, установите флажок там null, как в лог-коте, предоставленном вами, исключение - это пустой указатель, поэтому выглядит, что TEMP_LAT может быть пустым ... –

+1

oh yeaah, i понял. большое спасибо Dheeresh :) – DevYudh

0

Использование Double.parseDouble(TEMP_LAT);

+0

Просьба видеть его исключение - это NullPointerException. Хотя использование метода parseDouble() 'для синтаксического анализа является хорошим предложением, но это не относится к вопросу. –

2

У вас есть исключения нулевого указателя, так что вы должны к нему так:

public Double getLatitude(){ 
    for(int posisi = GPS_NAME.indexOf(","); posisi > GPS_NAME.length(); posisi++){ 
     TEMP_LAT = "" + GPS_NAME.indexOf(posisi); 
    } 
    if (TEMP_LAT != null) { 
     GPS_LATITUDE = Double.parseDouble(TEMP_LAT); 
    } 

    return GPS_LATITUDE; 
} 

И для преобразования в два раза, а вы должны использовать Double.parseDouble() или же вы можете использовать new Double(TEMP_LAT).doubleValue() но первый подход чище.

1

Помимо вероятных причин для NPE, я действительно не понимаю вашу логику; это выглядит полностью изворотливым для меня.

Просто некоторые примеры:

GPS_NAME.indexOf(",") либо вернуть -1 или индекс, который меньше, чем длина строки, в которой осуществляется поиск. Тогда почему есть условие, которое проверяет, больше ли оно длины? posisi > GPS_NAME.length() никогда не будет правдой, следовательно, для петель бесполезны ...

Затем внутри петель TEMP_LAT = "" + GPS_NAME.indexOf(posisi). Из предыдущего замечания мы знаем, что posisi либо -1, либо какое-либо другое число, которое меньше длины строки. Таким образом, GPS_NAME.indexOf(posisi) попытается найти символ, представленный целым числом posisi (который будет довольно маленьким числом) в строке. Как это имеет смысл?

Я хотел бы посоветовать вам переосмыслить вашу логику - возможно, String.split(",") - хорошая отправная точка.

+0

до тех пор, как я знаю, если подстрока str не встречается, возвращается -1. но подстрока «,» встречается в моей строке – DevYudh

+0

, которую я читал из этого артиста MH http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter10/stringBufferToken.html об использовании indexof в String. его сказал: «Это приводит к значению 4 в переменной x. Если строка не содержит такого символа, метод возвращает -1». – DevYudh

+1

@DevYudh: Ух, это точно моя точка. Так как когда делает '-1> someString.length() 'yield' true'? Предполагая, что строка не 'null' (иначе мы получим другой NPE) длина строки будет'> = 0'. Следовательно, это условие в цикле for будет * всегда * разрешено false и сразу же ломается, что, скорее всего, также является причиной оставления 'TEMP_LAT'' null'. Тело цикла никогда не будет выполнено ... –

Смежные вопросы