2014-01-17 1 views
-2

Мой код выглядит следующим образом: содержаниеJava входного файла - NullPointerExeption

package examen2; 

import java.io.*; 
import java.util.*; 

public class Examen2 { 

    public static void main(String[] args) throws Exception { 
     FileInputStream fis = new FileInputStream("dataIn.txt"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(fis)); 

     TreeSet<Punct> set = new TreeSet(); 
     String line; 

//problem in the while statement 

     while (((line = br.readLine()).length() != 0)) { 
      String[] splited = line.split("([^0-9\\n\\r\\-][^0-9\\n\\r\\-]*)"); 
      int[] number = new int[splited.length]; 

      for (int i=0, j=0; i<splited.length; i++) { 
       number[j] = Integer.parseInt(splited[i]); 
       j++; 
      } 

      set.add(new Punct(number[0], number[1])); 

      Iterator it = set.iterator(); 

      while (it.hasNext()) { 
       System.out.print(it.next()); 
      } 
      System.out.println(); 
     } 

     br.close(); 
     br = null; 
     fis = null; 
    } 

    static class Punct implements Comparable { 

     int x; 
     int y; 

     Punct() { 
      x = 0; 
      y = 0; 
     } 
     Punct(int x, int y) { 
      this.x = x; 
      this.y = y; 
     } 

     @Override 
     public String toString() { 
      return "(" + this.x + ":" + this.y + ")"; 
     } 
     @Override 
     public boolean equals(Object o) { 
      try { 
       Punct other = (Punct)o; 
       return (this.x==other.x && this.y==other.y); 
      } catch (Exception ex) { 
       System.out.println(ex.getMessage()); 
      } 
      return false; 
     } 
     @Override 
     public int compareTo(Object t) { 
      Punct other = (Punct)t; 
      if (this.x == other.x && this.y == other.y) { 
       return 0; 
      } else if (Math.sqrt(Math.pow(this.x, 2)+Math.pow(this.y, 2))-Math.sqrt(Math.pow(other.x, 2)+Math.pow(other.y, 2))>0) { 
       return 1; 
      } else { 
       return -1; 
      } 
     } 

     @Override 
     public int hashCode() { 
      return super.hashCode(); //To change body of generated methods, choose Tools | Templates. 
     } 
     @Override 
     protected void finalize() throws Throwable { 
      super.finalize(); //To change body of generated methods, choose Tools | Templates. 
     } 
     @Override 
     protected Object clone() throws CloneNotSupportedException { 
      return super.clone(); //To change body of generated methods, choose Tools | Templates. 
     } 

    } 

} 

dataIn.txt:

3 assfas 4

5 ASFL; A 8

И выписывает на консоль:

(1: 2)

(1: 2) (3: 4)

(1: 2) (3: 4) (5: 8)

(1: 1) (1: 2) (3: 4) (5: 8)

(1: 1) (1: 2) (3: 4) (5: 8)

Исключение в потоке "основного" java.lang.NullPointerException

at examen2.Examen2.main(Examen2.java:15) 

Java Результат: 1 построить успешные (общее время: 0 секунд)

Это пример того, какие проблемы будут на экзамене завтра.

Мне нужно прочитать пару чисел из каждой строки входного файла. Я думаю, проблема не в регулярном выражении, а в интерпретации результата, но я не смог найти решение.

ответ

2

Где вы взяли эту строку кода?

while (((line = br.readLine()).length() != 0)) { 

Это не хорошо, как вы будете в конечном итоге называть length() на несуществующий объект.

Вместо этого проверьте, что строка не имеет значения null и используется в состоянии while.

while((line=br.readLine())!=null) { 
//.... 
} 
+0

Я не добавляю значение 'br.readLine()' перед вызовом lenght – Czoka

+0

@Czoka: about, '" Я не добавляю значение "' - что? –

+0

Работает отлично, больше никаких ошибок. благодаря – Czoka

1

NullPointerException исходит от этой линии:

while (((line = br.readLine()).length() != 0)) { 

Когда BufferedReader's readLine() method достигает конца потока, он возвращает null, не пустая строка.

Возвращает:

Строка, содержащая содержимое строки, не включая любые линии прекращения символов, или ноль, если конец потока достигнут

Try

while ((line = br.readLine() != null) {