Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Benutzereingabe über Scanner Klasse korrekt behandeln
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
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
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
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");
}
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
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^^