2017-04-21 5 views
-1

Ich arbeite an einem Kurs und ich bin mit einer Ausnahme konfrontiert, wenn ich versuche, aus einer Textdatei zu laden.java.lang.NullPointerException beim Lesen aus einer Textdatei

Ich versuche, die IDs und die Fragen zu speichern.

sollte die Ausgabe sein:

{285 = Fill in the blank. A Node is generally defined inside another class, making it a(n) ____ class. } 
{37 = How would you rate your programming skills?} 

Das in der Text-Datei ist:

258 MC 
Question 
Fill in the blank. A Node is generally defined inside another class, making it a(n) ____ class. 
Answer 
Private 
Inner 
Public 
Internal 
Selected 
2 

37 L5 
Question 
How would you rate your programming skills? 
Answer 
Excellent 
Very good 
Good 
Not as good as they should be 
Poor 
Selected 
-1 

public static void main(String[] args) throws IOException { 

try (BufferedReader br = new BufferedReader(new FileReader("questions.txt"))) { 


    Map < Integer, String > map = new HashMap < Integer, String >(); 
    String line = br.readLine(); 


    while (line != null) { 
    String[] temp; 

    temp = line.split(" "); 
    int id = Integer.parseInt(temp[0]); 

    line = br.readLine(); 
    line = br.readLine(); 

    String question = line; 
    line = br.readLine(); 
    line = br.readLine(); 

    while (line.trim() != ("Selected")) { 

    line = br.readLine(); 

    } 

    line = br.readLine(); 
    int selected = Integer.parseInt(line); 
    line = br.readLine(); 

    map.put(id, question); 
    System.out.println(map); 
    } 
} 

} 

Wenn der Code ausgeführt Ich erhalte:

Ausnahme im Thread "main" java.lang.NullPointerException unter daos.test.main (test.java:47) C: \ Benutzer \ droop \ Desktop \ DSA \ Neu Ordner \ dsaCW2Template \ nbproject \ build-impl.xml : 1076: Der folgende Code ist beim Ausführen dieser Zeile aufgetreten: C: \ Benutzer \ droop \ Desktop \ DSA \ Neu Ordner \ dsaCW2Template \ nbproject \ build-impl.xml: 830: Java zurückgegeben: 1 BUILD FAILED (total : 0 Sekunden)

Antwort

3

Der Zustand der while Schleife beginnend mit

while (line.trim() != ("Selected")) { 
    ... 

ist immer erfüllt, so dass Sie das Ende der Datei abliest enden. line wird schließlich null und line.trim() erhält eine NPE.

Vergleichen Sie niemals Strings mit == oder `! =; Verwenden Sie stattdessen String.equals():

while (!line.trim().equals("Selected")) { 
    ... 
0

Reparieren Sie Ihre innere während Bedingung

while (line != null && line.trim() != ("Selected")) { 

    line = br.readLine(); 

} 

Und verbessern yo ur Logik für die richtige Ausgabe.

+0

Autsch. Ersetzt einen Fehler durch einen anderen .... –

Verwandte Themen