# Mäxle in Java - Hall of fame



## Frauke (6. Nov 2007)

Hallo,

in meinem Studium muss ich zur Zeit das Würfelspiel Mäxle/Mäxchen programmieren.
Eine der Anforderungen ist eine Hall of Fame/Bestenliste, in der die zehn letzten Gewinner nach dem First-in-first-out-Prinzip aufgelistet werden.
Darum habe ich versucht, einen Array der Länge 9 (also 10 Plätze) zu erzeugen, diesen dann in ein .txt-Datei zu schreiben und beim Aufruf der Hall of fame diese auszulesen.
Leider funktioniert das nicht wie ich es möchte.


```
public void saveToHallOfFame(String name)
	{
		String[] winners = new String[9];		
		File hof = new File("HallOfFame.txt");
		try
		{
			if(hof.exists())
			{      System.out.println("Test 1");
				winners[0] = new String(name);	//An erster Stelle steht nun der letzte Gewinner.
			
				FileReader fr1 = new FileReader(hof);
				BufferedReader br =new BufferedReader(fr1);
				
					for(int i = 1; i<10; i++)		
					{System.out.println("Test 2");
						winners[i] = new String(br.readLine());
					}// ab hier Exception
					System.out.println("TestTest");
					br.close();	
					FileWriter fw=new FileWriter(hof);
					BufferedWriter bw = new BufferedWriter(fw); 			
					for(int i=0;i<10;i++)
					{System.out.println("Test 3");
						bw.write("" + winners[i]);
						bw.newLine();
					}
					
					bw.close();
					FileReader fr2=new FileReader(hof);
					BufferedReader br2 =new BufferedReader(fr2);
				
					for(int i=0;i<10;i++)
					{System.out.println("Test 4");
						String newnew = "" + br2.readLine();
						gf.addToHallOfFame(newnew);
					}

					br2.close();
		
			}else
			{	System.out.println("Test 5");
				hof.createNewFile();
				System.out.println("Test 6");
			}
		}catch(Exception e){}
	}
```
Die sysout's habe ich gemacht, um zu sehen, wo sich die Methode aufhängt. Das ist nach "Test 2" der Fall.

Ich hoffe, einer von euch hat eine Idee, wo mein Fehler liegen könnte.


----------



## Quaxli (7. Nov 2007)

Eigentlich müßtest Du nur mal Deine catch-Anweisung so schreiben:


```
...
		} catch (Exception e) {
			System.out.println(e);
		}
```

Dann wird es klarer. Dein Programm wirft nämlich ein NullPointerException. Ursache ist, daß Du bei "Test2" zwar Dein File liest, dort aber nix drin steht. Denn das hast Du ja beim ersten Durchlauf "Test5" zwar angelegt, aber mit einer Größe von 0 kb. Daher liefert Dein BufferedReader nichts zurück.

Noch 2 Anmerkungen:

Diesen Code:


```
for (int i = 1; i < 10; i++) {
					System.out.println("Test 2");
					winners[i] = new String(br.readLine());
				}
```

würe ich so schreiben:


```
for (int i = 0; i < winners.length; i++) {
					System.out.println("Test 2");
					winners[i] = new String(br.readLine());
				}
```


und statt


```
FileReader fr1 = new FileReader(hof);
            BufferedReader br =new BufferedReader(fr1);
```

würe ich das so machen:


```
BufferedWriter bw = new BufferedWriter(new FileWriter(hof));
```

Die Variable fr1 brauchst Du ja nicht wirklich 
Ist aber nur ein Vorschlag . 

Weiterhin viel Spaß!


----------



## Guest (7. Nov 2007)

Danke, ich probier's jetzt mal und meld mich dann wieder, ob's geklappt hat.


----------



## merlin2 (8. Nov 2007)

```
String[] winners = new String[9];
```
Das sind nur 9 Elemente.


----------



## Frauke (9. Nov 2007)

Hallo,

hab eine Lösung für mein Problem gefunden.


```
public void saveToHallOfFame()
{
	try{
	Player winner=(Player)activevector.elementAt(0);	
	String name =winner.getName(); 
	String[] array =new String[22];
	File file =new File("HallOfFame.txt");
	if(file.exists()==false)
		{
			file.createNewFile();
		}
	array[0]=new String(name);
	
	FileReader fr=new FileReader(file);
	BufferedReader br =new BufferedReader(fr);
		
		for(int i=1;i<10;i++)
		{
			array[i]=new String(br.readLine());
		}

	br.close();	

		FileWriter fw=new FileWriter(file);
		BufferedWriter bw = new BufferedWriter(fw); 			
	for(int i=0;i<10;i++)
		{
		bw.write(array[i]);
		bw.newLine();
	
		}	
	bw.close();
	FileReader fr2=new FileReader(file);
	BufferedReader br2 =new BufferedReader(fr2);
		
		for(int i=0;i<10;i++)
		{
			gf.halloffamepanel.text.setText("\n"+br2.readLine());
		}

	br2.close();
	}catch(Exception e){}

}
```

Danke für eure Tipps!


----------



## Xams (10. Nov 2007)

Was soll denn das new String(br.readLine()); 
schreib doch einfach
array_=br.readLine();_


----------

