Ausnahmebehandlung(Exception Handling)

nekyl

Mitglied
Hallo allerseits! Ich hab hier ein kleines Java Programmchen, wo der Quadratwurzel der angegebenen Zahl berchnet werden soll. Aber wenn ich keinen Parameter angebe, dann bekomme ich eine Fehlermeldung. Und wie kann ich das gut machen? Die Behandlung sollte ungefähr so lauten: "Fehler! Es soll einen Parameter angegeben werden!" Danke im Voraus!
Code:
public class Beispiel2
{

public static void main(String[] args)
{
try {
if (args.length > 1) {
System.out.println ("Fehler aufgetreten! Es darf nur einen Parameter gegeben werden!");
}
int a;
a = Integer.parseInt (args[0]);
if (a>0) {
System.out.println("" + (int)Math.sqrt(a));
}
else {
System.out.println("Parameter soll groesser als 0 sein!");
}
}

catch (NumberFormatException e) {
System.out.println("Der angegebene Parameter ist keine Zahl!");
}
}
}
 
Hallo,

du prüfst doch hier ob mehrere Parameter angegeben werden.
Code:
if (args.length > 1) { 
System.out.println ("Fehler aufgetreten! Es darf nur einen Parameter gegeben werden!"); 
}

Warum machst du das dann nicht auch so, wenn keiner angegeben wird?


Nutze doch bitte die Code-Tags. (#-Symbol in der Toolbar)

MFG

Sascha
 
Das ist IMHO ein klassischer Fall für eine IllegalArgumentException. Einfach anstelle des System.out (das gehört sowieso verboten ;) ) die Exception mit gleichem Erklärungstext werfen. Es macht sicher auch Sinn, die ganze Validierungslogik in eine Methode

Java:
private int getCheckedParameter(String[] args) throws IllegalArgumentException

auszulagern und dann mit dem sauberen Integer weiterzurechnen.

Gruß
Ollie
 
Zuletzt bearbeitet:
hab scho das Problemchen gelöst und zwar so:

catch (ArrayIndexOutOfBoundsException e) {
System.out.println("schon wieder den Parameter vergessen?!");
}

Ich hoffe, das passt.
 
@Oliver Gierke
Ich finde bei so einem kleinen Programm ist es eigentlich egal. :-)

@nekyl
Ich würde es dann eher machen wie Oliver es vorgeschlagen hat und vorher prüfen ob die Daten korrekt sind.

MFG

Sascha
 
Ich halte ArrayIndexOutOfBoundsException für den falschen Weg. Das mag zwar funktionieren, aber vom Design her ist es grottig und würde ein Review bei mir definitiv nicht bestehen. Du möchtest eine fachliche Validierung vornehmen (die Parameterliste auf Länge und den ersten Parameter auf den Wertebereich überprüfen. Das fachliche Problem ist also, dass der Parameter falsch ist, nicht dass das Array nicht die richtige Größe hat.

Siehs doch mal vom Client aus. Womit kann der Benutzer mehr anfangen?
ArrayIndexOutOfBounds? WTF?
IllegalArgument? Ah, alles klar... falsche Parameter / Argumente.

Diese Kleinigkeiten unterscheiden guten von schlechtem Code, wartbaren von unwartbarem. Wenn du den Blick für sowas von Anfang entwickelst ist das sicher ein Vorteil, daher der Hinweis.

Gruß
Ollie
 
ArrayIndexOutOfBound und NullPointer Exception sind typische RuntimeExceptions, die wenn se auftreten man se oft erst bei der Ausführung merkt.

Daher sollte man so programmieren, dass diese garnicht auftaucht....indem man z.B. auf null testet oder die größe des Arrays/der Liste prüft, bevor man drauf zugreift.

P.S.: Wenn du eine void Methode (wie main also) beenden willst, kannst du das auch durch ein leeres return;
ein Programm lässt sich auch durch System.exit() beenden
 
Zurück