Frage von Sheyn, 70

Java Exception Error Handling - Wie funktioniert das?

Hallo Leute, Ich habe etwas Programmiert, wo man nur die Wahl zwischen 1 und 2 hat. Meine Frage ist, wie kann ich es schreiben, dass wenn jemand zb eine 3 eingibt es einen Error gibt und wieder zum Anfang des Programms springt?

Danke schonmal :)

Expertenantwort
von KnusperPudding, Community-Experte für Java, 48

Du kannst einer Methode Methode sagen, dass diese generell einen Fehler Auswerfen kann, indem du hinten an die Methode ein "throws Exception" anhängst:

private void test() throws Exception {
 ...
}

bei deinem Beispiel würde das in etwa so aussehen:

private void waehleZahl(int zahl) throws Exception {
 if (zahl > 2) {
    throw new Exception("Zahl übersteigt das Limit");
 }
}

Das wiederum behandelst du in einem Try-Catch Block:

try {
waehleZahl(3);
} catch (Exception e) {
e.printStackTrace();
}

Und behandelst diese ausnahme wie du es für dich richtig ist.: Brichst die Methode ab und gibst die Meldung an den Anwender raus, oder wie auch immer.

Kommentar von KnusperPudding ,

[...]wieder zum Anfang des Programms springt

Willst du wirklich zum Anfang des Programms?

Du willst ja nur, dass eine Eingabe von 1 und 2 Möglich ist. Das wäre auch "einfacher" lösbar, indem du z.B. eine Schleife nimmst, die erst verlassen wird, wenn eine korrekte Eingabe (Wert1-2) getätigt wurde.

while (auswahl == 0) {
    int eingabe = new Scanner(System.in).nextInt();
    if (eingabe >= 1 && eingabe <= 2) {
        auswahl = eingabe;
        break;
    } else {
        System.err.println("Bitte nur 1 oder 2 eingeben");
    }
}
Kommentar von Tschoo ,

Was ist, wenn ein Alpha-Zeichen eingegeben wird?

Oder nur <Enter>

Kommentar von KnusperPudding ,

Dieselbe Aussage wie für den KingTamino gilt auch für dich.


 Meine Frage ist, wie kann ich es schreiben, dass wenn jemand zb eine 3 eingibt

Darauf habe ich Stellung bezogen. Da muss ich mich von einem der gar keine Antwort bereit stellt, nicht rechtfertigen.


Wegen solchen Leuten wie euch zwei kommt der Gedanke hoch, nicht mehr Teil der Community sein zu wollen.

Kommentar von KingTamino ,
if (zahl > 2)

Und was wenn der User "0" oder "-1" eintippt?

Kommentar von KnusperPudding ,

Das ist ein Beispiel um ErrorHandlung zu erklären. Ich fasse daher deinen Kommentar als Provokation auf, zumal ich für die einfache Lösung im unmittelbaren Kommentar einen konkreten vollständigen Lösungsweg angeboten habe. Was soll das also?

Antwort
von uni61182, 54

also erstmal kannst du natürlich eine hauptschleife programmieren und if/ then verwenden oder mit errorlevel arbeiten oder aber ein try catch block nutzen

Kommentar von KingTamino ,

Ich würde für den Anfang zu "if" raten. Er scheint ja noch in den Kinderschuhen zu stecken ;)

Kommentar von uni61182 ,

joa nen if drumrum und fertig ... if( eingabe==1 || eingabe==2) {Programmausführung}

Kommentar von Sheyn ,

Iwie bin ich sogar zu blöd für die if anweisung

es kommt dann zwar eine Fehlermeldung bei einer 3, aber das programm läuft einfach weiter.


Wie geht das denn mit der try catch metohde?

Kommentar von uni61182 ,

ne schleife ?

Antwort
von MalNachgedacht, 5

Für das was Du vorhast braucht man nicht unbedingt Java Exception Handling  (try-catch) 

eine simple Schleife tut es auch:

BufferedReader br = 
new BufferedReader(
new InputStreamReader(System.in));

boolean eingabeNotwendig=true;

String s;

while (eingabeNotwendig) {
System.out.print("Geben Sie 1 oder 2 ein");
String s = br.readLine();
eingabeNotwendig=!(s.equals("1") || s.equals("2"));
if (eingabeNotwendig){
System.out.print("Unzulässige Eingabe "+s);
}
}
// hier geht es nun mit dem Code weiter
// s ist entweder "1" oder "2"



Antwort
von KingTamino, 35

Sollte es in Java nicht eine Sprungfunktion geben? Du könntest zum Anfang des Programmes zurückspringen wenn KEINE 1 oder 2 eingeben wird.
Achte aber drauf, dass du nicht ausversehen zum Anfang springst wenn ne 1 eingegeben wird weil eine 1 KEINE 2 ist...

Beliebter Fehler ;)

---

Alternativ:

Du kontrollierst die Eingaben am besten mit ner Schleife.
Solange die Eingabe KEINE 1 oder 2 ist, wiederholt sich die Schleife halt.
Wenns eine 1 oder 2 ist => Schleife beenden.
(Möglich z.B. mit ner Variable. Speicher die User eingabe halt in die Variable und als Schleifenbedingung: UserEingabe != 1 || 2).

Sorry wenn die || nicht passen sollten. Hab nur C# gelernt und das schon vor ner ganzen weile..


Kommentar von uni61182 ,

sprungfunktionen gibt es so seit 20 Jahren nicht mehr!

Kommentar von KingTamino ,

Wie bereits erwähnt. Hab keine Erfahrung mit Java. Nur C#. Und da kann man halt Punkte setzten, zu denen ggf. gesprungen wird.

Kommentar von ceevee ,

Sprungfunktionen - also goto - sollte man allerdings niemals verwenden und sich das auch gar nicht erst angewöhnen, weil man damit sehr schnell sehr hässlichen Spagetticode erzeugt.

Kommentar von ceevee ,

Und wo ich das auch gerade sehe:

UserEingabe != 1 || 2

das wäre in ziemlich vielen Programmiersprachen falsch, u.a. in Java und in C#. 1 | 2 ergibt als binäre Operation 3, 1 || 2 wird wahrscheinlich auf false evaluieren. Deine Abfrage wäre also gekürzt möglicherweise UserEingabe != false, oder sonst irgendwas. Aber auf alle Fälle nicht das richtige. UND (&&) und ODER (||) hast du auch vertauscht. Richtig wäre

(UserEingabe != 1 && UserEingabe != 2)

Wenn du merkst, dass deine Programmierkenntnisse doch nicht so doll sind, solltest du vielleicht andere Nutzer nicht so offensiv kritisieren. ;)

Kommentar von KingTamino ,

^^ man man ceevee. Hab doch gesagt ich hab mich lange nicht mehr mit beschäftigt. Hatte nur im hinterkopf noch | bzw. &. War ja nur als Beispiel herangezogen. Denke nicht, dass eine 100% richtige Syntax daher wichtig ist

Antwort
von Borgler94, 9

ich würde das mit while machen

zuerst
int input = in();

dann
while( !(input==1 || input ==2)
{
System.out.println("nur 1 oder 2 erlaubt");
input = in();
}

schon kann der input nurmehr 1 oder 2 sein

Antwort
von Borgler94, 8

ich schick dir heute abend eine beispielklasse, die genau das macht dass dann eine Exception geworfen wird die dann z.b. "3 ist nicht erlaubt, bitte 1 oder 2 eingeben" ausgibt

Keine passende Antwort gefunden?

Fragen Sie die Community