BufferedReader bricht nach 1248 Iterationen ab

d00d

Mitglied
Hallo, ich habe folgenden Code:
Code:
 BufferedReader br = null;
        try {
            String respath = "/result_website.txt";
            InputStream in = tsnrDAO.class.getResourceAsStream(respath);
                      
            br = new BufferedReader(new InputStreamReader(in));
    
            String line =  null;
            HashMap<Object, Number> map = new HashMap<>();
    
            while ((line=br.readLine())!=null) {
                String str[] = line.split(" ");
                    map.put(Double.parseDouble(str[1]), Double.parseDouble(str[2]));
      
            }
            return map;

Was der Reader macht, ist meine Datei zu öffnen und Zeilenweise die beiden x und y Koordinaten in der Map zu speichern. Die Datei hat ca. 13.000 Zeilen und jede Zeile hat 3 Werte, einen Identifier, eine x und eine y-Koordinate:

https://abload.de/image.php?img=abload4ed38.png

Nach 1248 Iterationen springt das Programm aus der while-schleife raus und ich versteh nicht, warum, da in der besagten Zeile in der Datei die Daten einfach weitergehen ohne Zeilenumbruch, Leerzeile o.ä.

Kann mir da jemand helfen?
 
Zuletzt bearbeitet:
Ich habe gerade festgestellt, dass in meiner .txt Datei in der erstellten .war nur 1248 Einträge drin sind. Ich versuche noch rauszufinden, warum das so ist, da in dem Original in meinem workspace mehr Einträge drin sind. Aber daran liegt der Fehler.
 
Hallo,

cool dann hast du dein Problem ja selbst gelöst.

Ich hätte noch einen Hinweis:
Java:
 BufferedReader br = null;
Java:
String line =  null;
Musst du nicht mit null initialisieren. Alle Klassen und Variablen werden ohne explizite Initialisierung automatisch mit null initialisiert. 🙂

Grüße
Marah
 
Ich hätte noch einen Hinweis:
Java:
 BufferedReader br = null;
Java:
String line =  null;
Musst du nicht mit null initialisieren. Alle Klassen und Variablen werden ohne explizite Initialisierung automatisch mit null initialisiert. 🙂
Nein, uninitialisiert und mit null initialisiert ist ein Unterschied 😉
Im ersten Fall verhindert der Compiler lesende Zugriffe, die sind erst nach expliziter Zuweisung möglich.

In diesem Fall würde ich aber sowohl uninitialisert und mit null initialisiert explizit als schlechter Stil bezeichnen, in beiden Fällen ist das initialisieren mit einem sinnvollem Wert möglich.
Kann man dann gleich zu try-with-resources und for-loop refactoren.
 
@Marah es geht "nur" um die Bezeichnungen.
Alle Klassen und Variablen
Ist was anderes als Klassen- und Instanzvariablen.
Code:
class X {
    static int i;
    String s;
    void m() {
        Character c;
    }
}
Hier hast Du eine Klassenvariable i, eine Instanzvariable s und eine Variable c. Die ersten beiden werden mit Standardwerten (i=0 und s=null) initialisiert, c wird dagegen nicht initialisiert.
 
Es würde wohl in jedem Fall ne NullPointerException fliegen, aber ich halte die Initialisierung mit null eig. für sauberer. Ist aber reine Geschmackssache.
 
@mrBrown Wenn eine Klassenvariable (als Referenz) mich nicht initialisiert wurde, wirft Java eine NPE, sobald du sie benutzt. Bei primitiven Datentypen bin ich mir da aber gerade nicht so sicher. Aber das JRE kann meines Wissens erkennen, ob eine Variable schon initialisiert / gesetzt wurde.
 
@thecain Ah Sry, das lokale hatte ich tatsächlich übersehen. Allerdings müsste Java dann eig. auch eine NPE werfen (bin mir allerdings gerade nicht ganz sicher).
 
@thecain Ah Sry, das lokale hatte ich tatsächlich übersehen. Allerdings müsste Java dann eig. auch eine NPE werfen (bin mir allerdings gerade nicht ganz sicher).
Lesender Zugriff ist nur auf initialisierte Variablen erlaubt.
Bei Feldern passiert das implizit mit dem jeweiligen Null-Wert, deshalb die NPE.
Lokale Variablen werden nicht implizit initialisiert, deshalb gibt es ohne explizite Zuweisung von null auch keine NPE. Stattdessen verbietet der Compiler den lesenden Zugriff ohne expliziten initiaisierung.
 

Zurück
Oben