Input/Output die eine txt-Datei funktioniert die andere nicht

Fe_Fis

Mitglied
Wie oben geschrieben hab ich ein Programm, bei dem es einmal funktioniert und mal nicht je nach dem welche txt-Datei ich Öffne(beide im selben Ordner)

Dieser Funktioniert:
Java:
import java.io.BufferedReader;
 
//import java.io.FileNotFoundException;
 
import java.io.FileReader;
 
import java.io.IOException;
 
import java.util.StringTokenizer;
 
import java.util.HashMap;
 
import java.util.Iterator;
 
import java.util.Map;
 
//import java.util.Map.Entry;
 
public class Superstar {
 

 
    public static void main(String[] args) throws IOException {
 
        FileReader fr = new FileReader("superstar1.txt");        // hier geht's
 
        BufferedReader br;
 
        br = new BufferedReader(fr);
 
        HashMap<String, Integer> NamesListed = new HashMap<String, Integer>();
 
        while (br.readLine() != null){
 
            String Person1 = br.readLine();           
 
            StringTokenizer token1 = new StringTokenizer(Person1);
 
            int length1 = token1.countTokens();
 
            for( int i = 0; i < length1; i++ ){               
 
                NamesListed.put(token1.nextToken(), 0);
 
            }                   
 
        }
 
        br.close();               
 
        FileReader fm = new FileReader("superstar1.txt");       // hier geht's
 
        BufferedReader bm;
 
        bm = new BufferedReader(fm);
 
        HashMap<String, Integer> NamesFollow = new HashMap<String, Integer>();
 
        while (bm.readLine() != null){
 
            String Person1 = bm.readLine();           
 
            StringTokenizer token1 = new StringTokenizer(Person1);
 
            NamesFollow.put(token1.nextToken(), 0);                                           
 
        }
 
        bm.close();
 
        Iterator it = NamesListed.entrySet().iterator();
 
        while (it.hasNext()) {
 
            Map.Entry pair = (Map.Entry)it.next();
 
            if (NamesFollow.containsKey(pair.getKey()) == false){
 
            System.out.println("JA --> " + pair.getKey());           
 
            }           
 
        }                               
 
    }
 
}

Dieser nicht:
Code:
import java.io.BufferedReader;
//import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
//import java.util.Map.Entry;
public class Superstar {

    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("superstar2.txt");            // hier nicht
        BufferedReader br;
        br = new BufferedReader(fr);
        HashMap<String, Integer> NamesListed = new HashMap<String, Integer>();
        while (br.readLine() != null){
            String Person1 = br.readLine();           
            StringTokenizer token1 = new StringTokenizer(Person1);
            int length1 = token1.countTokens();
            for( int i = 0; i < length1; i++ ){               
                NamesListed.put(token1.nextToken(), 0);
            }                   
        }
        br.close();               
        FileReader fm = new FileReader("superstar2.txt");        //hier nicht
        BufferedReader bm;
        bm = new BufferedReader(fm);
        HashMap<String, Integer> NamesFollow = new HashMap<String, Integer>();
        while (bm.readLine() != null){
            String Person1 = bm.readLine();           
            StringTokenizer token1 = new StringTokenizer(Person1);
            NamesFollow.put(token1.nextToken(), 0);                                           
        }
        bm.close();
        Iterator it = NamesListed.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            if (NamesFollow.containsKey(pair.getKey()) == false){
            System.out.println("JA --> " + pair.getKey());           
            }           
        }                               
    }
}

(Das ist eine Aufgabe aus dem BWINF)

Das größte Problem ich bin Relativ neu und mein Informatik Lehrer, bei dem wir gerade in BlueJ Java programmieren, kann mir nicht weiterhelfen


Hoffe auf Hilfe
Fe_Fis
 
wenn ich die Datei superstar2.txt auswähle funktioniert es nicht und ich bekomme folgende Nachricht:
Exception in thread "main" java.lang.NullPointerException
at java.util.StringTokenizer.<init>(Unknown Source)
at java.util.StringTokenizer.<init>(Unknown Source)
at Superstar.main(Superstar.java:19)
 
Das passiert wahrscheinlich dann, wenn die Datei eine ungerade Zeilenanzahl enthält, denn du prüfst nur für die ungeraden Zeilen, ob sie eingelesen wurden, versuchst aber, nur die geraden Zeilen zu verarbeiten.
 
Ich habe jetzt die erste for-Bedingung mit einer while-Schleife ausgetauscht, wenn ich dass richtig verstanden habe?
Trotzdem sie selbe Fehlermeldung
 
Mit den Zeilen
Java:
        while (br.readLine() != null){
            String Person1 = br.readLine();
liest Du jeweils zwei Zeilen ein. Willst Du alle:
Java:
        String person1;
        while ((person1 = br.readLine()) != null){
Willst Du nur die geraden/ungeraden, kannst Du z. B. einfach mitzählen:
Java:
        int line;
        String person1;
        while ((person1 = br.readLine()) != null){
            line++;
            if (line % 2 == 0) {
                // gerade Zeile
            } else {
                // ungerade Zeile
            }
        }

Wenn Du den Modulo-Operator nicht verwenden darfst, nimmst Du ein boolean:
Java:
        boolean gerade = true;
        String person1;
        while ((person1 = br.readLine()) != null){
            gerade = !gerade;
            if (gerade) {
                // gerade Zeile
            } else {
                // ungerade Zeile
            }
        }
 

Zurück
Oben