Zeilenweises Einlesen in Array

schweito

Neues Mitglied
Liebe Javagemeinde,

mein aktuelles Problem ist ein sehr merkwürdiges. Ich möchte lediglich zeilwenweise aus
einer Datei in ein Arrays lesen und über eine Randomfunktion Worte
aus dem Array laden.

Meine Aufgabe war es in diesem Beispiel die Laderoutine erstellen, da das Programm auf ein
Hangmanspiel aus einem Lehrgang aufbaut. Das Merkwürdige nun ist, dass das Programm
manchmal normal startet und auch fehlerfrei arbeitet. Beende ich das Programm und
starte es neu (mit Eclipse), kommt ab und an eine NullPointerException. Die Datei ist vorhanden
alle Exceptions auf die ich prüfe (siehe Code) geben keinen Fehler aus - ich bin echt ratlos
momentan.

Java:
private void neuesWort() {
		
		//Aufgabe 2
		int zufall = 0;
		
			int zeile=0;
			String woerter[];
			woerter = new String[20];

			try {
			BufferedReader bDatei = new BufferedReader(new FileReader ("liste.txt"));
			
			String inhalt ="";
		
			while ((inhalt = bDatei.readLine()) != null) {
				woerter[zeile]=inhalt;
				zeile++;
			}
			bDatei.close();
			
			
			}catch (FileNotFoundException e)
			{
			    System.out.println("Datei kann nicht gefunden werden.");
			}
			catch (EOFException e)
			{
				System.out.println("Ende der Datei wurde erreicht.");
			}
			catch (ObjectStreamException e)
			{
				System.out.println("Datei ist nicht lesbar");
			}
			catch (IOException e)
			{
				System.out.println("Allgemeiner I/O Fehler");
			}
			
		
		
		
		
		//String[] woerter ={"Test", "Automobil", "Versuch", "Hund", "Katze",
			//	"Ziege", "Maus", "Elefant", "Isopropylalkohol", "Schwimmbad"};
		//ein zuf�lliges Wort ermitteln
		//dazu wird eine zuf�llige Zahl zwischen 0 und 1 ermitteln und mit der L�nge von woerter - 1 mulitpliziert
		zufall = (int)(Math.random() * (woerter.length-1));
		
		//das Suchwort und die Zeichen f�r die Anzeige setzen
		suchwort = new String(woerter[zufall]); //NULL POINTER Exception
		anzeige = new StringBuilder(suchwort);
		
		//alle Zeichen in der Anzeige ersetzen durch *
		for (int zeichen = 0; zeichen < suchwort.length(); zeichen++)
			anzeige.setCharAt(zeichen, '*');

		//die Sternchen anzeigen
		ausgabeText.setText(anzeige.toString());
	}
 
Hallo,

dein Array "woerter" hat immer 20 Einträge.
Es werden davon so viele Einträge gefüllt, wie deine Datei Zeilen enthält.
Hätte deine Datei zu viele Einträge (was hier nicht zutrifft), bekämst du beim Einfügen (in Zeile 16) eine IndexOutOfBoundsException.
Offensichtlich enthält deine Datei aber zu wenig Zeilen. Damit sind die ersten Einträge des Arrays "woerter" gefüllt und die übrigen Einträge "null". Wenn der Zufallsgenerator eine kleine Zahl liefert, geht alles gut (der Eintrag im Array ist gefüllt); liefert er eine zu große Zahl, gibt es eine NPE (NullPointerException), weil der Eintrag im Array null ist. Das Problem kannst du lösen, indem du den Zufallszahlengenerator nicht Zahlen bis (woerter.length -1) sondern nur bis (zeile -1) erzeugen lässt (du warst ja schon so klug, die eingelesenen Zeilen mitzuzählen).
Das Problem, dass die Datei länger sein kann als dein Array, ist komplizierter zu lösen. Statt eines Arrays muss man dafür Klassen benutzen, bei denen man die Größe nicht von Anfang an kennen muss.

Gruß
Fritz
 
Zuletzt bearbeitet:
Klingt logisch - manchmal
bin ich echt n **** -
wenn man nicht wirklich jeden Fall
durchspielt...

Vielen Dank und nen schönen Tag!
-schweito
 

Zurück
Oben