Hallo.
Ich habe ein Problem mit der Klasse StreamTokenizer, mir fehlt leider die Zeit ihn weiter zu entwickeln.
Also nun das Problem:
Ich habe eine Datei die wie folgt organisiert ist:
5
###
0 1
1 5
2 9
3 10
4 13
###
0 1
4 11
END
Die erste Zeile enthält die maximal mögliche Anzahl von Zeilen zwischen 2 #-Zeilen.
Ich soll aus den Zeilen ab der 3. einen Graphen bauen, den ich nur über seine Kanten darstelle, hier der Code:
Der Knackpunkt liegt jetzt darin wie ich an die Daten für die Felder komme, ich hatte mir folgendes gedacht:
Die Datei wird mit einem FileReader geöffnet, welcher in einen StreamTokenizer gepackt wird. Soweit so gut, das parsen der ersten Zeile klappt auch wunderbar. Die #-Zeile wird übergangen.
Und hier kommt jetzt das Problem:
Ich müsste jetzt die 2 nächsten Zeilen einlesen, was auch klappt, nun brauche ich aber die zweite gelesene Zeile im nächstendurchgang wieder, weil ich immer aus den letzten Token die Differenz bilden muss. Ein doppeltes pushback() klappt nicht. Auch einfaches umkopieren in die Variablen der ersten Zeile funktioniert nicht, weil ich innerhalb einer Schleife agieren muss.
Mein bisheriger Code diesbezüglich ist leider völlig unbrauchbar, weshalb ich auch verzichte ihn hier zu posten.
Mit besten Grüssen,
Jhony-Walldorf
Ich habe ein Problem mit der Klasse StreamTokenizer, mir fehlt leider die Zeit ihn weiter zu entwickeln.
Also nun das Problem:
Ich habe eine Datei die wie folgt organisiert ist:
5
###
0 1
1 5
2 9
3 10
4 13
###
0 1
4 11
END
Die erste Zeile enthält die maximal mögliche Anzahl von Zeilen zwischen 2 #-Zeilen.
Ich soll aus den Zeilen ab der 3. einen Graphen bauen, den ich nur über seine Kanten darstelle, hier der Code:
Code:
static class Route{
private int start; // name der Startstation
private int ziel; // Name der zielstation
private int linie; // Linie, welche die Route befährt.
private int diff; // Zeitdifferenz in Minuten
/**
* Der Standardkonstruktor erzeugt eine Kante mit sinnlosen werten.
*
*/
Route(){
start = -1;
ziel = -1;
linie = -1; // Noch nie eine Linie mit dieser nummer gesehen.
diff = -1; // Wir fahren rueckwaerts, was hier unzulaessig ist.
}
/**
* Dieser Konstruktor will wissen, von Wo wir wohin fahren wollen.
* @param nstart , int. Nummer der Startstation.
* @param nziel , int. Nummer der Zielstation.
*/
Route( int nstart, int nziel){
start = nstart;
ziel = nziel;
linie = -1; // siehe oben
diff = 0;
}
/**
* Dieser Konstruktor, will alles wissen.
* @param nstart , String name der Startstation.
* @param nziel , String. Name der Zielstation
* @param nlinie , int. Nummer der Linie.
* @param ndiff , int. Zeitdifferenz zwischen nstart und nziel.
*/
Route( int nstart, int nziel, int nlinie, int ndiff){
start = nstart;
ziel = nziel;
linie = nlinie;
diff = ndiff;
}
/**
* Diese Methode gibt den den namen der Startstation aus.
* @return int.
*/
int getStart(){
return(start);
}
/**
* Diese Methode gibt den Namen der Zielstation zurück.
* @return int.
*/
int getZiel(){
return(ziel);
}
/**
* Diese Methode gibt die Nummer der Linie zurueck.
* @return int.
*/
int getLinie(){
return(linie);
}
/**
* Dieser Geter liefert die Zeitdifferenz zwischen Start und Ziel.
* @return int.
*/
int getDiff(){
return(diff);
}
}
Der Knackpunkt liegt jetzt darin wie ich an die Daten für die Felder komme, ich hatte mir folgendes gedacht:
Die Datei wird mit einem FileReader geöffnet, welcher in einen StreamTokenizer gepackt wird. Soweit so gut, das parsen der ersten Zeile klappt auch wunderbar. Die #-Zeile wird übergangen.
Und hier kommt jetzt das Problem:
Ich müsste jetzt die 2 nächsten Zeilen einlesen, was auch klappt, nun brauche ich aber die zweite gelesene Zeile im nächstendurchgang wieder, weil ich immer aus den letzten Token die Differenz bilden muss. Ein doppeltes pushback() klappt nicht. Auch einfaches umkopieren in die Variablen der ersten Zeile funktioniert nicht, weil ich innerhalb einer Schleife agieren muss.
Mein bisheriger Code diesbezüglich ist leider völlig unbrauchbar, weshalb ich auch verzichte ihn hier zu posten.
Mit besten Grüssen,
Jhony-Walldorf