Java try catch, wie zurück auf Try?
Hallo liebe Programmierer :D Ich habe ein kleines mini Glücksspiel geschrieben. Die Eingabe soll sich zwischen 1 und 2 beschränken, der Rest soll nicht angenommen werden und eine Fehlermeldung angeben, danach soll die Eingabe wieder stattfinden.
try
{
antwort = scan.nextInt();
while(antwort > 2)
{
System.out.println("Nur 1 oder 2!");
System.out.println("Ja = 1\nNein = 2");
antwort = scan.nextInt();
}
}
catch(Exception e)
{
System.out.println("Es ist ein Fehler aufgetreten");
}
Wie kann ich jetzt schreiben, wenn z.B. ein Buchstaben (also kein integer) eingegeben wird, die Fehlermeldung erscheint und die eingabe wieder erscheint?
Danke im vorraus :)
4 Antworten
wow, so viele Antworten, so viele Möglichkeiten, da beteilige ich mich auch mal.
Wie andere auch, wäre es gut das ganze in einer Kopfgesteuerten Schleife zu machen:
Solange die Antwort dem Initialwert entspricht wird die schleife wiederholt.
Die Antwort wird erst gesetzt (und somit die schleife verlassen) sobald ein erlaubter Wert eingegeben wurde. Wurde ein Fehler Verursacht durch eine nicht-integer-Eingabe behandelt das der Catch-Block.
int antwort = 0; int[] erlaubteWerte = {1, 2};
while (antwort == 0) {
try { System.out.println("Bitte zahl auswählen"); int input = new Scanner(System.in).nextInt(); if (IntStream.of(erlaubteWerte).anyMatch(x -> x == input)) { antwort= input; } } catch (Exception e) { System.out.println("Es ist ein Fehler aufgetreten"); } } System.out.println("Zahl ausgewählt: " + antwort); }
Du verwendest den Try Block ja nur weil du eine fehlgeschlagene Umwandlung von einem Wort in eine Zahl vermeiden willst. Dann verwende doch den Block nur da und nicht für die Komplette Eingabe.
antwort = 3;
while(antwort > 2){
System.out.println("Nur 1 oder 2!");
System.out.println("Ja = 1\nNein = 2");
try{
antwort = scan.nextInt();
}
catch(Exception e) {
System.out.println("Es ist ein Fehler aufgetreten");
}}
Wenn negative Zahlen kommen, dann muss man halt die while-Schleife anpassen. Wenn man im catch-Block einen ungültigen Wert für die Variable angibt, also z.B. "antwort = -1" anstatt der Ausgabe, dann müsste das Programm so laufen, wie es der Fragesteller wünscht.
@Sheyn: Es gibt einen Unterschied zwischen "programmieren" und "Code ausm Internet zusammenkopieren, bis es läuft". Es ist wichtig, dass du auch verstehst, was du machst. Vielleicht hilft es, wenn du dir hinter jede Zeile, die dir auch nur halbwegs unklar ist, einen Kommentar schreibst, was diese Zeile macht.
Verschieb das try-catch in das Innere der Schleife.
Mach daraus eine kopfgesteuerte Schleife.
Sischa doch. Wie sieht deins den aus? Probier mal folgendes:
antwort = 3; while(antwort > 2) { try { antwort = scan.nextInt(); if(!((antwort == 2)||(antwort == 3))) { System.out.println("Nur 1 oder 2!"); System.out.println("Ja = 1\nNein = 2"); } } catch(Exception e) { System.out.println("Es ist ein Fehler aufgetreten"); } }
(ungetestet)
Würde ich "antwort" aber nicht die 3 zuweisen würde es nicht funktionieren
und gebe ich dann einen buchstaben ein, spamt er mir die ganze Konsole voll mit "Es ist ein Fehler aufgetreten"
Das wundert mich und kann ich im Moment nicht erklären, weshalb er den Fehler immer wieder auslöst. Normalerweise müsste es mit jedem Schleifendurchlauf eine Eingabemöglichkeit geben.
Eventuell gibt es noch eine Fehlerstatus-Reset-Möglichkeit. Bin da in Java nicht so bewandert.
Versuch mal, antwort = scan.nextInt(); aus dem try zu ziehen.
Die Meldung mit Ja=1... solltest du natürlich vor die Eingabe ziehen.
wenn du eine funktion machst
public int wert(){
int input = sanner.nextint();
if(input == 1 || input == 2){
return input;
}
system.out.println("fehler")
return wert();
}
die rufst du dann mit wert() auf und bekommst immer 1 oder 2 zurück
Kann es sein, dass du try/catch nicht wirklich verstanden hast und es deswegen nicht nutzt? Wenn du einen Buchstaben eingibst, dann schmeißt scanner.nextInt() eine Exception.
Und was ist mit negativen Zahlen? ;)