Exceptions Benutzereingaben

Diskutiere Exceptions Benutzereingaben im Java Basics - Anfänger-Themen Bereich.
X

xImJugo

Hallo zusammen,
ich versteh zwar das Prinzip hinter Exceptions aber wie genau benutz ich sie für mich selber? Ich hab hier ein Programausschnitt, der auf eine Benutzereingabe wartet. (Hier am Bsp: add <Busnummer >;< Start >;< Ziel >;< Preis >;<Währung > ). Die <> sind zu ignorieren und sind nur Platzhalter, aber jetzt 2 Fragen:

1. Kann man irgendwie mit util oder util.regex überprüfen, ob meine Benutzereingabe genau dem Pattern von oben add überprüft und add nur ausführt, wenn es passt?

2. Wie kann ich eine IllegalArgumentException werfen und catchen? Mein Porgramm unten funktiniert, wenn man alles richtig eingibt, aber bei falschen Eingaben schaff ich es net die Fehler zu catchen. Muss ich die IllegalArgumentException selbst schreiben oder überschreiben (wenn ja wie?) und wie genau wend ich das try catch Prinzip an und wer wirft (throw) die Exception?
(Anmerkung: bitte kein gotta catch them all prinzip, sondern nur dort, wo ich es brauche. Ist es sinvoller die Exceptions in meiner Main zu packen oder in der Klasse, wo ich die entsprechenden Methoden habe ?

Java:
   String[] userinputsplitted = Terminal.readLine().split("[ |;]");
            String userinput = userinputsplitted[0];

            if (userinput.contentEquals("add")) {
                String userinput2 = userinputsplitted[1];
                int number = Integer.parseInt(userinput2);
                String userinput3 = userinputsplitted[2];
                String userinput4 = userinputsplitted[3];
                String userinput5 = userinputsplitted[4];
                double price = Double.parseDouble(userinput5);
                String userinput6 = userinputsplitted[5];
                Currency currency = Currency.valueOf(userinput6);
                bs.add(number, userinput3, userinput4, price, currency);
 
B

Barista

Du musst den Code-Bereich, in dem die Exception gewrofen wird in einen try-catch-Block einschliessen.
 
X

xImJugo

Also wenn ich es richtig verstanden habe, muss in meiner Klasse, in der die methode steht, die Exception geworfen werden und in meiner main (hier oben gezeigt) kommt der try catch block?
 
Kirby_Sike

Kirby_Sike

Nein der try catch block wird in deiner Methode eingefügt und in der main müsste trotzdem eine Exception geworfen werden soweit ich weiß
 
mihe7

mihe7

versteh zwar das Prinzip hinter Exceptions aber wie genau benutz ich sie für mich selber?
Exceptions werden normalerweise geworfen, wenn bei einem Aufruf die Vorbedingung nicht eingehalten wurde oder von der aufgerufenen Methode die Nachbedingung nicht eingehalten werden kann.

Fehleingaben des Anwenders kann man als Regel betrachten, so dass man hier nicht zwingend auf Exceptions zurückgreifen muss. Hieran sieht man auch, dass die Grenzen fließend sind.

Kann man irgendwie mit util oder util.regex überprüfen, ob meine Benutzereingabe genau dem Pattern von oben add überprüft und add nur ausführt, wenn es passt?
Ja. Regexps wären eine Möglichkeit.

Skizze:
Java:
String userInput = Terminal.readLine();
if (userInput.startsWith("add")) {
   if (userInput.matches(regex)) { // regex kennzeichnet hier einen passenden regulären Ausdruck
       // alles ok
   } else {
       // Fehlerbehandlung, z. B. Ausgabe
       // System.out.println("Bitte Befehl der Form add <Busnr>;... eingeben");
       // oder Exception werfen
       throw new IllegalStateException("Eingabe (" + userInput + ") entspricht nicht der Form add <Busnr>;...");
    }
}
Du kannst natürlich auch eigene Exceptions definieren (eigene von Exception bzw. RuntimeException abgeleitete Klasse) und werfen. Wenn es sich um checked Exceptions handelt, musst Du diese in der Methodensignatur deklarieren (throws InvalidInputException), bei unchecked Exceptions kannst Du Dir das sparen.

Checked Exceptions müssen vom Aufrufer abgefangen werden - unchecked Exceptions nicht. Der Aufruf wäre dann:
Java:
try {
    methodeDieEineIllegalStateExceptionWerfenKoennte();
} catch (IllegalStateException ex) {
    // Ausnahme behandeln.
}
 
Thema: 

Exceptions Benutzereingaben

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben