Java: Wie kann ich falsche Benutzereingaben (Strings) abfangen?
Hallo zusammen!
Ich bin gerade an meinem Programm, in dem ich einfach eine falsche Benutzereingabe abfangen und die Eingabe wiederholen möchte.
Da ich aber String-Variablen habe, kommen immer sehr komische Ergebnisse heraus.
In dem folgenden Beispiel wird halt der Scanner geöffnet, damit man eine Antwort eingeben kann. Wenn die Antwort nicht den drei möglichen Optionen (in do-while oder if) entspricht, soll "Sie können nur mi..." ausgegeben und der Scanner wieder zur erneuten Eingabe aktiviert werden. So lange, bis man eben eine von den drei Antworten eingibt.
Beispiel:
String antwort;
do {
antwort = scan.next();
if (antwort != "antwort1" && antwort != "antwort2" && "antwort3") {
System.out.println("Sie können mit -antwort1-, -antwort2- oder -antwort3- antworten");
}
}
while (antwort != "antwort1" && antwort != "antwort2" && "antwort3");
PS: Die Konsole überspringt meistens einfach den Code und macht beim nächsten weiter oder man kommt in eine "Sie können mit antw...."-Schleife, egal ob man das Richtige oder das Falsche eingibt.
Ich sitze schon seit einer Stunde an diesem Fehler und habe alles mögliche durchgelesen und probiert. Vielleicht ist es auch nur ein ganz einfacher Fehler aber ich brauch gerade echt Hilfe.
GLG
2 Antworten
Strings musst du in Java immer mit equals vergleichen. Also so:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean again = true;
do {
String antwort = in.next();
if (!antwort.equals("Antwort1") && !antwort.equals("Antwort1") && !antwort.equals("Antwort1")) {
System.out.println("Sie können mit \"Antwort1\", \"Antwort2\" oder \"Antwort\" antworten.");
} else {
again = false;
}
} while (again);
}
Ich würde es aber eher mit einem switch oder einer Liste von Antwortmöglichkeiten machen. Also:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean again = false;
do {
String antwort = in.next();
again = false;
switch (antwort.toLowerCase()) {
case "antwort1": System.out.println("Ausgabe für Antwort1"); break;
case "antwort2": System.out.println("Ausgabe für Antwort2"); break;
case "antwort3": System.out.println("Ausgabe für Antwort3"); break;
default: System.out.println("Sie können mit \"Antwort1\", \"Antwort2\" oder \"Antwort\" antworten.");
again = true;
}
} while (again);
}
oder:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
List<String> antwortmoeglichkeiten = Arrays.asList(new String[] {"antwort1", "antwort2", "antwort3"});
boolean again = false;
do {
String antwort = in.next();
if (antwortmoeglichkeiten.contains(antwort.toLowerCase())) {
System.out.println("Ausgabe für \"" + antwort + "\"");
again = false;
} else {
System.out.println("Sie können mit einem dieser Wörter antworten: " + antwortmoeglichkeiten);
again = true;
}
} while (again);
}
Man vergleicht in Java Strings nicht mit == oder !=, sondern mit String.equals und !String.equals. a == b ist etwas anderes als a.equals(b)!
Für zwei unterschiedliche String-Instanzen ist a == b immer false, weil hier die Referenz verglichen wird. a.equals(b) vergleicht aber den Inhalt.
Außerdem dürfte der Code gar nicht compilieren, denn
antwort != "antwort2" && "antwort3"
ist keine gültige Syntax.
Stiimt! Haben wir eh in der Schule durchgemacht, bin aber grad nicht draufgekommen. Danke!
Meega dickes danke für die Beispiele! Konnte es jetzt lösen :))