Scanner hasNext(Line)() Block Problematik...

donchris

Aktives Mitglied
Ich habe eine kleine Programmieraufgabe zu bewältigen, die mich im Moment den letzten Nerv kostet. Es geht um eine kleine Konsolenanwendung, die Befehle von der Konsole einliest und dann verarbeitet. Nun habe ich eine Scanner Instanz und eine while Schleife, die solange durchläuft bis hasNextLine() false zurück liefert.

In meinem Programm werden je nach Code Objekte instanziiert, die sich dann um die Weiterverarbeitung kümmern, daher wird in der main das spezifische Objekt erzeugt und per Konstruktor eine Referenz auf den Scanner mitgegeben. Dieses neue Objekt soll dann sich die benötigten Parameter direkt vom Scanner holen und je nach bedarf weiterarbeiten/parsen.

Nun zum Problem selbst: Es entsteht eine Art Endlosschleife und es sollte eigentlich keine "leeren Zeilen" geben doch ich kann dies ja nicht prüfen, da sonst der Scanner auf den nächsten Token/Line verweist und eventuell Parameter/Befehle übergangen werden. ich kann ja nicht den aktuellen Token testen, ohne dass der Scanner "weiterfährt" ... oder ?

Weiter werden oft Chars als Parameter erwartet, die ich per scanner.next().charAt(0) entnehme, doch irgendwie müsste ich ja prüfen können, ob es ein Zeichen gibt (also eine Art hasNextChar() - leider gibt es diese Methode ja nicht 🙁 )

Gibt es weiters eine Möglichkeit Token, die man vom Scanner hat, wieder so anzugängen, als ob man sie nicht entnommen hätte? ..

ich hoffe ihr könnt mir helfen 🙂
 
Du kannst doch den String den scanner.next() liefert in einer Variable speichern, diese kannst Du dann beliebig prüfen, zerstückeln oder anderweitig weiter verarbeiten.
 
Ja, das mach ich auch teilweise, doch das Problem ist, das vorgeschrieben ist, dass ich keine Strings an die verarbeitenden Objekte weiterleite, sondern eine Referenz des Scanners ... und dem fehlen dann die Strings, die ich schon ausgelesen habe 🙁 ...

Weiters bringt mir der String insofern nicht viel, da ich trotzdem eine Endlosschleife habe - das block Problem und ich hoffe, dass es da eine art If gibt, die dann die schleife unterbricht... aber

Java:
 if (scanner.next().equals("")) 
           break;

brachte keinen Erfolg..
 
Der Scanner wird dann vom aufgerufenen Objekt ausgewertet, welches dann die Fehler abfängt/auswertet und dann die eigentlichen "Berechnungen" wieder durch ein anderes Objekt durchführen lässt.

Also main (referenziert Scanner) und lädt je nach Befehl einen neuen Vermittler -> "Vermittler"-Objekt wertet Scanner oberflächig aus extrahiert Parameter und ruft damit ein neues Objekt auf -> Verarbeitendes Objekt verarbeitet die Parameter.

Je nach Befehl wird dann ein Vermittler erzeugt, der dann die spezifischen Parameter vom Scanner direkt nimmt und verarbeitet und schlussendlich das "datenverarbeitende Objekt" erzeugt und zurückliefert.

Leider ist die Implementierung weitaus schwieriger als die Theorie... und ich habe nun das Problem, dass ich auf der einen Seite eine Endlosschleife habe, da ich keine leeren Zeilen erkennen kann und auf der anderen Seite, dass ich auch keine Ahnung habe warum ich trotz hasNextLine() diese aus hasNext() bekannten block Anomalien habe... ok, ich verwende next, aber nicht in der main, sondern in den erzeugten Vermittler-Objekten ..

lg

ps: Bezüglich wer mach solche Angaben ... das ist eine meiner ersten Programmier Lehrveranstaltungen auf der Uni - und nun will man uns möglichst viel refaktorisieren lassen und so die Erzeugung von Modulen vereinfachen...
 
Zuletzt bearbeitet:
Wirklich verstanden habe es nicht, um was es da geht bzw. was da wie implementiert werden soll.
Kannst Du eventuell kompilierbaren BspCode posten, damit mal sieht um was da geht und wie sich der Fehler äussert?
 

Zurück
Oben