Ausnahmen abfangen

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo,

ich möchte bei meinen Programmen gerne, zumindest an den Stellen, an denen der Benutzer eine Eingabe tätigt, eventuelle Fehlermeldungen abfangen und ggf. verarbeiten, damit mein Prog nich beendet wird.

Wie mach ich das, wenn double/int/float/... verlangt wird, aber ein falsches Zeichen (z.B. 'a' oder '#') eingegeben wird? Da stürzt das Programm dann ab. Ich bin letztendlich auf die Try-/Catch-Schleifen gestoßen, kenn mich da aber noch nich so sehr mit aus. Gibt es viell. noch andere Möglichkeiten, in meinen Beispielen den Scanner bei falscher Eingabe so lange laufen zu lassen, bis die Eingabe korrekt ist?

Schonmal Danke im Voraus

Gruß
Sascha
 
Hi,

try-catch ist keine Schleife sondern eine Anweisung, ein Block oder sonstiges, aber keine Schleife 😉 .

Ein Beispiel:

Code:
String line = null;
int zahl = 0;
BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in));
while(!(line = buffy.readLine().equals("exit")) {
   try {
     zahl = Integer.parseInt(line);
     break;
   }
   catch (NumberFormatException e) {
      System.out.println("Bitte eine ganze Zahl oder 'exit' eingeben");
   }
}
 
DaSaeschOnAir hat gesagt.:
Hallo,

ich möchte bei meinen Programmen gerne, zumindest an den Stellen, an denen der Benutzer eine Eingabe tätigt, eventuelle Fehlermeldungen abfangen und ggf. verarbeiten, damit mein Prog nich beendet wird.

Wie mach ich das, wenn double/int/float/... verlangt wird, aber ein falsches Zeichen (z.B. 'a' oder '#') eingegeben wird? Da stürzt das Programm dann ab. Ich bin letztendlich auf die Try-/Catch-Schleifen gestoßen, kenn mich da aber noch nich so sehr mit aus. Gibt es viell. noch andere Möglichkeiten, in meinen Beispielen den Scanner bei falscher Eingabe so lange laufen zu lassen, bis die Eingabe korrekt ist?

Schonmal Danke im Voraus

Gruß
Sascha

Gleich vorab Try-/Catch-Schleifen gibt es nicht. Genauso wie es keine If-Scheifen gibt.

Für das ganze hast du jetzt zwei Möglichkeiten, entweder du machst das ganze in einen Try-Catch-Block

Code:
try {
    // Hier dein Code
} catch (Exception) { // Schätze mal das wird wohl eine NumberFormatException sein
    // Hier die Fehlerbehandlung
}

oder du prüfst die Benutzereingaben selbstständig nochmal bevor du sie im Programm dann weitergibst

Code:
String benutzereingaben = ....... // String für die Benutzereingaben
// Um den String zu prüfen kannst du jetzt entweder einen Try-Catch-Block verwenden wo du versuchst
// die Benutzereingaben zu Casten. Funktioniert es sind die Eingaben ok, gibt es nen Fehler waren sie falsch
try {} cacth {}
// Oder du gehst den String in einer for-Schleife durch und prüfst jede einzelne Stelle
for (int i = 0; i < benutzereingaben.lenth; i++) {
    if (!Charakter.isDigit(benutzereingaben.charAt(i))) {
        // Fehler
    }
}

Die Code-Schnipsel hab ich aus dem Kopf getippt, also keine Gewähr auf Richtigkeit. Als Denkanstoss sollten sie jedoch reichen.

Achja und man könnte dir bestimmt besser helfen, wenn du zukünftig etwas Code mit posten würdest, dass man sieht was in deinem Programm eigentlich so läuft.

MfG
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben