2013-09-13 4 views
0

Я работаю над проектом Java, чтобы добавить каждое целое число в одно в следующей строке, пока в файле не будет строк. Чтобы иметь возможность добавить его, я должен использовать Integer.parseInt (...) в строке, а затем добавить его. P.S: цикл for будет просто пропускать две строки, которые содержат заголовок файла. И вся строка ссылается на числа, которые Integer.parseInt() принимает.Ошибка Integer.parseInt: java.lang.Integer.parseInt (Неизвестный источник)

Вот полная ошибка исключение:

Exception in thread "main" java.lang.NumberFormatException: null 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at prog.Result(prog.java:93) 
at prog.main(prog.java:56) 

Код в результате исключения является:

public static void Result() throws IOException 
    { 
     FileReader fileReader = new FileReader(dir+"/"+log_file); 
     BufferedReader bufferedReader = new BufferedReader(fileReader); 
     int i; 
     for (i=0;i<=2;++i) 
     { 
      bufferedReader.readLine(); 
     } 
     int result =0; 
     while (bufferedReader.readLine() != null) 
     { 
      result += Integer.parseInt(bufferedReader.readLine()); 

     } 
     System.out.println("The Result Is : " + result); 

    } 
+0

Безотносительно это чтение не является числом. Проверьте источник данных. – crush

+0

Это действительно номер, вот фактический источник файла log.txt: 15 13 20 20 (каждый номер находится в строке) – user2774643

+0

Попробуйте отладить, и вы увидите ошибку! –

ответ

5

Этот блок фактически считывает два линий, а не один.

while (bufferedReader.readLine() != null) 
{ 
    result += Integer.parseInt(bufferedReader.readLine()); 
} 

Ошибка возникает, когда последняя строка считывается в проверке состояния while, а внутренняя часть блока будет считывать null, так как нет больше строк, чтобы быть считаны.

Это идиоматическое писать петли, как это так:

String line; 
while ((line = bufferedReader.readLine()) != null) 
{ 
    result += Integer.parseInt(line); 
} 
+0

Используя это, я получаю результат = 20; так как он должен равняться 40, потому что две строки, которые должны быть добавлены, содержат: 20 20 – user2774643

+0

Хорошо, я понял, моя ошибка: для (i = 0; i <= 2; ++ i) должно быть: for (i = 0 ; i <2; ++ i), поэтому цикл for выполняется только 2 раза, а не 3. – user2774643

5

Я думаю, что это ваша проблема:

while (bufferedReader.readLine() != null) 
    { 
     result += Integer.parseInt(bufferedReader.readLine()); 

    } 

Вы звоните readLine() два раза там. Вы должны сохранить исходный результат в переменной и повторное использование, которое приведет к вызову parseInt().

+0

Можете ли вы прояснить, как сохранить исходный результат в переменной и выполнить добавление по желанию. – user2774643

+0

@ user2774643 - Сделайте так, как говорит Марк Эллиот в своем ответе. – DaoWen

0

Во-первых, вы должны проверить данные в файле, чтобы убедиться, что все линии номер.

Во-вторых, вы должны попытаться поймать на линии, как показано ниже

try { 
    result += Integer.parseInt(bufferedReader.readLine()); 
} catch(Exception ex) 
Смежные вопросы