Eingabe über Scanner einlesen und automatisch beenden

Status
Nicht offen für weitere Antworten.

serendipity

Mitglied
Hallo @all,

ich habe ein Programm geschrieben, dass Gleitkommazahlen vom Nutzer einliest (über java.util.scanner), diese in einem Array speichert und anschließend das Array durchläuft und prüft, ob die eingegebenen Zahlen aufsteigend sortiert sind. Der Nutzer beendet die Eingabe entweder vorzeitig durch Eingabe eines nichtnumerischen Wertes oder es wird automatisch nach 8 Zahlen abgebrochen.

Das Ganze funktioniert auch wunderbar, solange der Nutzer seine Zahlen durch RETURN trennt. Wenn man allerdings Leerzeichen als Trennung verwendet (was der Scanner ja trotzdem als separate Eingaben erkennt), wird das Einlesen nicht automatisch nach 8 Eingaben beendet.

Hier mal der Code zur Verdeutlichung:

Java:
// VORBEREITUNG
		double[] zahlenfolge = new double[8];
		int anzahl = 0;
		double vorigeZahl = Double.MIN_VALUE, aktuelleZahl;
		boolean istSortiert = true;		
		java.util.Scanner s = new java.util.Scanner(System.in);
		// Anfangsmeldung
		System.out.println("<A2: Pruefung auf aufsteigende Sortierfolge>\n"
				+ "     max. 8 Gleitkommazahlen Zahlen eingeben, "
				+ "nichtnumerische Eingabe ist Eingabeende");
		
		// HAUPTTEIL
		// Einlesen
		while ((anzahl < zahlenfolge.length) && s.hasNextDouble()) {
			zahlenfolge[anzahl] = s.nextDouble();
			anzahl++;
		}
		System.out.println("Es wurden " + anzahl + " Zahlen eingelesen.");
		
		// Auswerten
		// Pruefen auf sortierte Zahlenfolge wenn mind. 1 Zahl eingegeben wurde
		if(anzahl != 0){
			for(int i = 0; i < anzahl; i++) {
				aktuelleZahl = zahlenfolge[i];
				if (vorigeZahl > aktuelleZahl) istSortiert = false;
				vorigeZahl = aktuelleZahl;
			}
			// Ausgabe
			System.out.print("Die Zahlenfolge ist ");
			
			if (!istSortiert) System.out.print("NICHT ");
			System.out.println("aufsteigend sortiert.");			
		}
		else System.out.println("Bitte geben Sie mindestens eine Zahl ein.");

Das Problem tritt irgendwie in der while-Schleife auf... Seltsamerweise greift die Abbruchbedingung, wenn man mehr als 8 per Leerzeichen getrennte Zahlen eingibt und er liest auch wirklich nur die ersten 8 Zahlen ins Array. Dh. die while-Schleife wird danach nicht mehr ausgeführt, aber er springt aus irgendeinem Grund nicht zur nächsten Anweisung... Der Nutzer kann also fröhlich locker weiter Zahlen eingeben, bis er schließlich irgendwann ein nichtnumerisches Zeichen oder RETURN eingibt.

Vielleicht kann mir jemand einen Tipp geben?

viele grüße,
sara
 
S

SlaterB

Gast
solange nicht Return gedrückt wird kannst du tippen was dir Spaß macht, das Programm bekommt nichts davon mit,
etwa so wie 'Antwort eintippen hier im Forum', vor dem Antworten-Button weiß das Forum davon auch nix,
 
B

bygones

Gast
solange nicht Return gedrückt wird kannst du tippen was dir Spaß macht, das Programm bekommt nichts davon mit,
etwa so wie 'Antwort eintippen hier im Forum', vor dem Antworten-Button weiß das Forum davon auch nix,

waere das Forum n Google Wave Client waere dieser Vergleich falsch ;-)
 

serendipity

Mitglied
dh, wenn ich das richtig verstehe: der scanner liefert erst die einzelnen tokens für die while-schleife, wenn ich return drücke?
gibts denn irgendeinen weg, wie ich trotzdem - mit leerzeichen - die eingabe auf 8 zahlen beschränken könnte?
 
S

SlaterB

Gast
in while eine Variable i hochzählen, i<8 oder ähnlich als zusätzliche Bedingung ins while,

oder eine for-Schleife
 

serendipity

Mitglied
Ja, das habe ich doch: meine "anzahl" variable wird bei jedem durchlauf inkrementiert und sollte also für den abbruch sorgen. machts ja auch, wenn ich eben immer mit return die zahlen voneinander trenne...aber eben nicht bei leerzeichen.
 
S

SlaterB

Gast
hab nicht genau vorher nachgeschaut,

na dann wird doch wohl die Schleife nicht über 8 hinauslaufen oder?
vielleicht hängt sie an einer Scanner-Eingabe,

prüfe per System.out.println(), wie viele Schleifendurchläufe es gibt
 

serendipity

Mitglied
ok, also ich verstehs nicht! hab jetzt mal eine Ausgabe in die while-Schleife gebastelt, wie vorgeschlagen. Wenn ich jede Zahleneingabe mit return bestätige wird jedes Mal mein println ebenfalls ausgegeben (wie erwartet). wenn ich aber nun die zahlen nur durch leerzeichen getrennt eingebe, wird nichts zwischen den einzelnen zahlen ausgegeben (kann also ungehindert mehr als 8 eingeben), sondern erst, wenn ich return (oder nichtnumerisches zeichen) eingebe, werden meine println's alle nacheinander ausgegeben. also so etwa:

mit return:
zahl1 (return)
"Es wurde 1 Zahl eingegeben"
zahl 2 (return)
"Es wurden 2 Zahlen eingegeben"
...

mit leerzeichen:
zahl1 (leerzeichen) zahl2 (lehrzeichen) ... zahlx (return)
"Es wurde 1 Zahl eingegeben"
"Es wurde 2 Zahl eingegeben"
...
"Es wurde x Zahl eingegeben"

wenn ich mir aber das array anzeigen lasse (nach der while-schleife), sind da in jedem der fälle immer nur die (ersten) 8 Zahlen drin. also scheinbar führt er im falle des leerzeichens die while-schleife erst hinterher aus (bis die abbruch bedingung greift).. warum???
 
S

SlaterB

Gast
> also scheinbar führt er im falle des leerzeichens die while-schleife erst hinterher aus

hinter was?
erst nach dem Return?
da wären wir wieder bei der ersten Antwort:

solange nicht Return gedrückt wird kannst du tippen was dir Spaß macht, das Programm bekommt nichts davon mit,
etwa so wie 'Antwort eintippen hier im Forum', vor dem Antworten-Button weiß das Forum davon auch nix,
 
S

SlaterB

Gast
tja, ich bezog mich darauf, den while-Schleifen-Code zu beschränken usw.

wieviel der User eintippt kannst du nicht begrenzen, ganz böse verknüpfen da eine 1 GB-Textdatei als Eingabe ;)
nur die Verarbeitung im Programm liegt in deiner Hand
 

serendipity

Mitglied
ok, der einwand ist berechtigt. da es sich aber um eine uni-hausaufgabe handelt, muss ich mir über solche feinheiten keine gedanken machen^^ ich wollts eben nur perfekt machen.

nach etwas genauerer überlegung habe ich jetzt auch meinen denkfehler gefunden: java.util.scanner liest zeilenweise ein und erst nach beendigung einer zeile zerlegt es diese in die einzelnen tokens, richtig? dann ist auch klar, warum meine abbruchbedingung mit der return-variante einwandfrei funktioniert, nicht aber bei trennung der tokens durch leerzeichen...
sicher gibt es da auch einen work-around, aber ich muss mich ja an meine vorgaben halten ;) dann muss ich mich damit so jetzt zufrieden geben, schätze ich.

danke für die hilfreichen tipps!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
R Eingabe über die Konsole wird übersprungen Java Basics - Anfänger-Themen 3
S Summierer mit Eingabe über die Kommando Zeile Java Basics - Anfänger-Themen 6
R Viereck zeichnen über TextField-Eingabe /ActionListener Java Basics - Anfänger-Themen 9
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
G Objektname über Eingabe bestimmen Java Basics - Anfänger-Themen 4
graai Zeichenmustr malen mit Eingabe Java Basics - Anfänger-Themen 7
Torschti Eingabe von Dezimalzahlen (bis zu zwei Kommastellen) Java Basics - Anfänger-Themen 11
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
A Bei VierGewinnt Eingabe per Buchstabe (a,b,c...) Java Basics - Anfänger-Themen 2
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
M Eingabe limit Java Basics - Anfänger-Themen 8
brypa Programm mit Eingabe Java Basics - Anfänger-Themen 129
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
Hamudi Bachir 2D Array eingabe vom Benutzer Java Basics - Anfänger-Themen 31
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
B Array bei jeder Eingabe um eins erweitern Java Basics - Anfänger-Themen 3
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
chocobear26 Interface JOptionPane - Dialog_Fenster zeigt immer vorherige Eingabe an. Java Basics - Anfänger-Themen 4
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
M JTextField nur Zahleneingaben zulassen, eingabe sperren Java Basics - Anfänger-Themen 24
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
N Fehlerausgabe bei falscher Eingabe der Users Java Basics - Anfänger-Themen 3
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
iman Eingabe von Benutzer Filter machen. Java Basics - Anfänger-Themen 7
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
H Eingabe Java Basics - Anfänger-Themen 7
F Bedingung für Eingabe Java Basics - Anfänger-Themen 2
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
Dimax Erste Schritte String Eingabe Prüfen Java Basics - Anfänger-Themen 11
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
J Eingabe Einschränken Java Basics - Anfänger-Themen 1
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
D Array via Eingabe befüllen Java Basics - Anfänger-Themen 6
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
S Konsolen eingabe Java Basics - Anfänger-Themen 17
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
x-tshainge Bei if (eingabe = = ... ) enter als eingabe nehemen Java Basics - Anfänger-Themen 4
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
S Eingabe in anderer Klasse verwenden Java Basics - Anfänger-Themen 3
T Input/Output Falsche Eingabe ausgeben Java Basics - Anfänger-Themen 3
R Ratespiel mit Return und einer Eingabe Java Basics - Anfänger-Themen 1
K Eingabe in Array speichern und Ausgeben Java Basics - Anfänger-Themen 9
J Eingabe des Scanners an einer bestimmten Position Java Basics - Anfänger-Themen 6
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
S Eingabe auf Richtigkeit und Reihenfolg überprüfen Java Basics - Anfänger-Themen 3
R Java CMD Eingabe verbergen Java Basics - Anfänger-Themen 4
L Eingabe überprüfen Java Basics - Anfänger-Themen 7
M Eingabe des Benutzers Verwenden Java Basics - Anfänger-Themen 9
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30
S Method mit Eingabe abrufen Java Basics - Anfänger-Themen 1
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
M Erste Schritte primzahlen ermitteln, nur zahlen als eingabe erlauben Java Basics - Anfänger-Themen 34
K Überprüfen ob Eingabe ein Float ist Java Basics - Anfänger-Themen 4
G Warum funktioniert das Programm für negative Eingabe nicht? Java Basics - Anfänger-Themen 3
O Erste Schritte Eingabe anweisungen eliminieren Java Basics - Anfänger-Themen 3
G Objekt Instanziierung von Eingabe abhängig machen Java Basics - Anfänger-Themen 5
B Interface JTextField Eingabe als String verwenden Java Basics - Anfänger-Themen 3
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
H Alternative Eingabe Java Basics - Anfänger-Themen 3
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
J Methoden Eingabe Methode nur Buchstaben Java Basics - Anfänger-Themen 4
F Die Teilersumme einer Eingabe berechnen Java Basics - Anfänger-Themen 11
H Leere Eingabe in einem array Java Basics - Anfänger-Themen 11
K Input/Output Nullstring als Eingabe Java Basics - Anfänger-Themen 4
M Eingabe im Terminal nicht möglich Java Basics - Anfänger-Themen 20
D Anzahl von Zahlen bei eingabe begrenzen Java Basics - Anfänger-Themen 37

Ähnliche Java Themen

Neue Themen


Oben