Java: Wie kann ich falsche Benutzereingaben (Strings) abfangen?

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);
	}
GurkenCombo 
Fragesteller
 03.09.2020, 10:11

Meega dickes danke für die Beispiele! Konnte es jetzt lösen :))

0

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.

GurkenCombo 
Fragesteller
 03.09.2020, 10:10

Stiimt! Haben wir eh in der Schule durchgemacht, bin aber grad nicht draufgekommen. Danke!

0