Benutzereingabe über Scanner Klasse korrekt behandeln

stonedzytode

Mitglied
Hallo,
ich stehe gerade vor einem kleinen Problem mit der Verarbeitung von Benutzereingaben und würde gerne wissen ob mein Ansatz korrekt ist, ist leider schon eine Weile her dass ich mit Java richtig zu tun hatte :)
Ich möchte eine Benutzereingabe in der Form Spielposition1 "Leerzeichen" Spielposition2 entgegennehmen. Die Eingabe soll lediglich Integer Zahlen berücksichtigen. Zudem müssen immer zwei Positionen eingegeben werden das heißt wenn man nur eine Zahl eingibt soll ebenfalls ein Fehler kommen.

Java:
public void naechsterZug(Spieler amZug) {
	
	
	Scanner s = new Scanner(System.in);
	
	int pos1 = 0;
	int pos2 = 0;
	
	try{
		
		  pos1 = s.nextInt();
		  pos2 = s.nextInt();
		
	}
	
	catch(InputMismatchException e) {
		System.out.println("Kein gültiges Feld eingegeben. Bitte wiederholen sie ihre Eingabe");
		this.naechsterZug(amZug);
		
	}
	System.out.println("Pos1: " +  pos1);
	System.out.println("Pos2: " +  pos2);
	}

Mich stört der rekursive Aufruf abgesehen davon dass es auch nicht wie gewünscht funktioniert. Gibt es eine elegantere Möglichkeit den Benutzer in der Eingabe gefangen zu halten bis sie die gewünschte Form hat?
Viele Grüße
StonedZytode
 
S

SlaterB

Gast
die einfachere Variante ist eine Schleife
und was du ganz dringend vermeiden solltest, ist, ständig einen neuen Scanner auf System.in zu erzeugen,
einer reicht Programm-weit, ruhig vereinfacht in einer statischen Variablen speichern wie System.in selber
 

c_sidi90

Top Contributor
Java:
private boolean gueltig = false;

public void deineAbfrage(){

   while(!gueltig){
        System.out.println("Pos1");
        pos1 = s.nextInt();
        System.out.println("Pos2");
        pos2 = s.nextInt();

        if(pos1 == ok %% pos 2 == ok){

            gueltig = true;
       }

   }
}
 

stonedzytode

Mitglied
Danke schonmal an euch beide. Die Idee mit der while Schleife hatte ich auch schon, hab sie zwischendurch aber verworfen. Ich werds nochmal so probieren :)
 

stonedzytode

Mitglied
Das Problem was zuvor, als ich die Idee mit der Schleife auch schon hatte, aufgetreten ist, ist dass er nur einmal nach einem gültigen Wert fragt und dann dauerhaft "Kein gültiges Feld eingegeben..." ausgibt. Das heißt er wartet beim zweiten mal nicht auf die Eingabe des Benutzers. Ich glaub das ist irgendein dummer Fehler aber ich seh ihn gerade einfach nicht.
Java:
public void naechsterZug(Spieler amZug) {
	
	boolean gueltig = false;
	int pos1;
	int pos2 ;
	while(!gueltig) {
	try{
			
		  pos1 = s.nextInt();
		  pos2 = s.nextInt();
		  gueltig = true;
		  //if(gueltigerZug(pos1,pos2)) gueltig = true;
		
	}
	
	catch(InputMismatchException e) {
		System.out.println("Kein gültiges Feld eingegeben. Bitte wiederholen sie ihre Eingabe");
		
		
	}

	}
	System.out.println("Ende");
	
}
 
S

SlaterB

Gast
Scanner kennenlernen,
was einmal drin stehen bleibt wird immer wieder abgefragt, wenn nicht übersprungen

mit new Scanner() wird das natürlich als Nebeneffekt umgangen.., alles alte weg,
ansonsten z.B. readLine() aufrufen um einze komplette Zeile zu lesen,
wird eher keine Exception werfen
 

chalkbag

Bekanntes Mitglied
Alternativ die fehlerhafte Eingabe überspringen.

Java:
catch (InputMismatchException e) {
				System.out.println("Kein gültiges Feld eingegeben. Bitte wiederholen sie ihre Eingabe");
				s.nextLine();
			}
 

c_sidi90

Top Contributor
Wenn ich dich richtig verstanden hab suchst du sowas.

Java:
public class FrageTest {
	int pos1;
	int pos2;
	public boolean gueltig = false;
	
	
	public void nextTurn(){
		
		while(!gueltig){
		
			Scanner s = new Scanner (System.in);
			System.out.println("Bitte Pos1 eingeben");
			
			try {
				pos1 = s.nextInt();
				
			} catch (Exception e1) {
				
				System.out.println("Falscher Wert Pos1 nur Zahlen");
				continue;
			}
			
			System.out.println("Bitte Pos2 eingeben");
			
			try {
				pos2 = s.nextInt();
				
			} catch (Exception e) {
				
				System.out.println("Falscher Wert Pos2 nur Zahlen");
				continue;
			}
		
			gueltig = true;
			
		}
		
		System.out.println(pos1 +" "+pos2);
	}
	
	public static void main(String[]args){
		
		FrageTest f = new FrageTest();
		f.nextTurn();
	}

}

Sorry hatte nicht mitbekommen das du bereits Hilfe bekommen hattest ;)
 

stonedzytode

Mitglied
Nebenbei nochmal ein Lob für das Forum, geht ja echt ziemlich fix hier :) Ich hab im letzten Jahr im Studium fast nur Betriebssystemfunktionen in C programmiert. Die Umstellung ist schon komisch irgendwie^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Benutzereingabe eines Codes verbessern Java Basics - Anfänger-Themen 3
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
D Input/Output Befehl aus Benutzereingabe herausfiltern Java Basics - Anfänger-Themen 12
J Stack mit Benutzereingabe Java Basics - Anfänger-Themen 17
A Reader für Benutzereingabe in Eclipse importieren Java Basics - Anfänger-Themen 3
Z Benutzereingabe überprüfen. Java Basics - Anfänger-Themen 2
B Input/Output Benutzereingabe mit BufferedReader Java Basics - Anfänger-Themen 7
NR_EIGHT Benutzereingabe in Funktion verpacken Java Basics - Anfänger-Themen 4
T Benutzereingabe in form von string wieder ausgeben in JOptionPane Java Basics - Anfänger-Themen 14
F Median berechnen, Benutzereingabe Problem! Java Basics - Anfänger-Themen 14
C Benutzereingabe Java Basics - Anfänger-Themen 41
D Benutzereingabe mit for-Schleife Java Basics - Anfänger-Themen 9
S Überprüfung Benutzereingabe Java Basics - Anfänger-Themen 5
D Wie auf leere Benutzereingabe (int) prüfen? Java Basics - Anfänger-Themen 16
J Programm beenden via Benutzereingabe Java Basics - Anfänger-Themen 8
K Objektname - Benutzereingabe? Java Basics - Anfänger-Themen 10
S Problem bei Benutzereingabe Java Basics - Anfänger-Themen 9
G Benutzereingabe auf Konsole maskieren (Passworteingabe) Java Basics - Anfänger-Themen 4
S Benutzereingabe - Gross und Kleinschreibung ignorieren Java Basics - Anfänger-Themen 7
C Benutzereingabe vergleichen Java Basics - Anfänger-Themen 3
G Benutzereingabe Java Basics - Anfänger-Themen 2
G Benutzereingabe entgegennehmen Java Basics - Anfänger-Themen 9
U Benutzereingabe die Zeichen einzeln bearbeiten Java Basics - Anfänger-Themen 7
G Benutzereingabe erzwingen Java Basics - Anfänger-Themen 3
richis-fragen GlassPane über JScrollPane legen Java Basics - Anfänger-Themen 6
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
B großzügiges Pixelraster über Bildschirm legen Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
S Java über SSH Java Basics - Anfänger-Themen 13
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
W char über die Konsole? Java Basics - Anfänger-Themen 7
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
A Array Ansprache einer Zelle über Punktnotation? Java Basics - Anfänger-Themen 3
O Java über cmd benutzen ? Java Basics - Anfänger-Themen 5
J Variablenzugriff über string Java Basics - Anfänger-Themen 18
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
M Java Kompilieren über Package grenzen hinaus Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
I GUI über Eclipse oder NetBeans Java Basics - Anfänger-Themen 23
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
O Methode über Leerzeichen Java Basics - Anfänger-Themen 13
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
G Arraynamen über eine Schleife ansprechen Java Basics - Anfänger-Themen 4
S Bild über JButton legen Java Basics - Anfänger-Themen 3
temi Druckeransteuerung über ESC-Sequenz Java Basics - Anfänger-Themen 21
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
P Threads Prozess kann nicht über die GUI gestartet werden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben