/*
* Created on 10.05.2005
*
*/
//Importieren aller benötigten Klassen
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
/**
* @author Hans Peter von Welt
*
*/
public class SortArray {
//In Objekten dieser inneren Klasse werden die einzelnen
//Highscore-einträge (Paare aus Spieler und Punkten) abgelegt
private class HighscoreEintrag implements Comparable {
//Speichert den Namen
private String name;
//Speichert die Punkte
private double punkte;
//Erzeugt einen neuen HighscoreEintrag
public HighscoreEintrag(String name, double punkte) {
this.name = name;
this.punkte = punkte;
}
/*
* Dies ist angesprochene Vergleichsfunktion, zu der wohl hinreichend
* genug gesagt wurde. Ggf. konkrete Fragen (Vergleich des eigenen
* Objekts mit dem übergebenen)
*/
public int compareTo(Object o) {
HighscoreEintrag hE = (HighscoreEintrag) o;
if (this.punkte > hE.getPunkte()) {
return 1;
} else if (this.punkte < hE.getPunkte()) {
return -1;
}
return 0;
}
//Es folgen drei Funktionen, um die Werte auszulesen
public String getName() {
return name;
}
public double getPunkte() {
return punkte;
}
public String toString() {
return this.name + ": " + this.punkte;
}
}//Ende der inneren Klasse
//Der Konstruktor, hier geht es richtig los
public SortArray() {
//Ein Array mit 10 einträgen vom Type HighScoreEintrag wird erstellt
//In diesem Array werden die einzenen Paare aus Spieler und Punktestand
//gespeichert
HighscoreEintrag[] highscore = new HighscoreEintrag[10];
//Ein neue "Dateiverbindung" erstellen
File f = new File("hs.txt");
//prüfen, ob die Datei existiert
if (f.exists()) {
try {
//Wenn sie existiert werden wir sie mit dem FileReader auslesen
FileReader fR = new FileReader(f);
//FileReader liest ein array of char und keinen String
char[] c = new char[(int) f.length()];
//und in das erstellte char-array einlesen
fR.read(c);
//aus dem char-array einen string erzeugen, der dann den
//Dateinhalt enthält
String s = new String(c);
//Den String bei Zeilenumbruch teilen und die einzelnen
//Teile (=Zeilen) in ein array of string schreiben
String[] entrys = s.split("\n");
////jede Zeile der Datei abarbeiten
for (int i = 0; i < entrys.length; i++) {
//Jede einzelene Zeile bei : trennen
//dieser wurde als Trennzeichen zwischen Spieler und
//Punktestand gewählt
if (i < 10) {
String[] entry = entrys[i].split(":");
//einen neuen Highscoreeintrag mit den eingelesenen
//Erzeugen, an der entsprechenden stelle im oben
//defineirten Array
highscore[i] = new HighscoreEintrag(entry[0], Double
.parseDouble(entry[1]));
}
}
//den FileReader wieder schließen
fR.close();
} catch (FileNotFoundException e) { //falls Fehler beim
e.printStackTrace(); //Einlesen auftreten,
} catch (IOException e) { //diese ausgeben
e.printStackTrace();
}
} else {
//Wenn die Datei nicht existiert werden Beispieleinträge angelegt
highscore[0] = new HighscoreEintrag("a", 10);
highscore[1] = new HighscoreEintrag("b", 90);
highscore[2] = new HighscoreEintrag("c", 55);
highscore[3] = new HighscoreEintrag("d", 5);
highscore[4] = new HighscoreEintrag("e", 20);
highscore[5] = new HighscoreEintrag("f", 50);
highscore[6] = new HighscoreEintrag("g", 40);
highscore[7] = new HighscoreEintrag("h", 80);
highscore[8] = new HighscoreEintrag("i", 30);
highscore[9] = new HighscoreEintrag("j", 70);
}
//Das Array wird sortiert!
//Dabei wird die in dem HighscoreEintrag implementierte
//Vergleichsfunktion verwendet (ohne dass Du es merkst)
Arrays.sort(highscore);
//Ausgabe der Liste
for (int i = 0; i < highscore.length; i++) {
System.out.println(highscore[i]);
}
//Der FileWriter ist analog zum FileReader
try {
FileWriter fW = new FileWriter(f);
for (int i = 0; i < highscore.length; i++) {
if (i < highscore.length - 1) {
fW.write(highscore[i].toString() + "\n");
} else {
fW.write(highscore[i].toString());
}
}
fW.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//Hier geht es los
public static void main(String[] args) {
//Es wird zum Testen ein Objekt der Klasse SortArray erstellt
new SortArray();
}
}