Exception wird nicht geworfen

hasenfuss10

Mitglied
Hallo Java Freunde,
ich möchte gerne bevor ein Object Kreis erstellt wird testen ob ein ungültiger Radius eingegeben wird
Wenn ungültig soll eine Exception geworfen werden.
Momentan wird allerdings immer ein Object erzeugt.
Warum wird die Exception nicht geworfen und das Object erstellt obwohl in der while Schleife nur Radien > 0 zugelassen sind?
Java:
public Circle(double radius, Point center) {
            try {
                while (radius > 0) {
                    circlepoi = new ArrayList<Point>();
                    this.radius = radius;
                    circlepoi.add(center);
                    draw();
                    System.out.println("new Circle created");
                    break;
                }
            } catch (IllegalArgumentException e) {
                System.err.println("Radius muss größer als 0 sein ");
            }
}
danke
hasenfuss
 
weil eine while schleife keine exception wirft, wenn ihre bedingung nicht erfüllt ist, sondern einfach nicht ausgeführt wird.
 
und welche Exception sollte wo geworfen werden?
viel eher wird doch eine gefangen mit try/ catch
 
Das Ziel ist eine Exception zu werden wenn unsinnige Parameter (Radius <= 0) eingegeben werden und damit auch die Object Erstellung eines Kreises mit Radius z.B. 0 zu verhindern.
 
mit anderen Worten, das Ziel ist ein völlig anderer Code,
naja, man sieht ein wenig den Willen zur Programmierung, das zählt schonmal

Java:
public Circle(double radius, Point center) {
  if (radius <= 0) {
    throw new IllegalArgumentException("Radius muss größer als 0 sein ");
  }
  circlepoi = new ArrayList<Point>();
  this.radius = radius;
  circlepoi.add(center);
  draw();
  System.out.println("new Circle created");
}
 
Das Ziel ist eine Exception zu werden wenn unsinnige Parameter (Radius <= 0) eingegeben werden und damit auch die Object Erstellung eines Kreises mit Radius z.B. 0 zu verhindern.
Mit catch fängst Du aber eine Ausnahme, statt eine zu werfen. Das ist sozusagen das genau Gegenteil von dem, was Du willst. Ansonsten hat SlateB mit seinem Beispiel hoffentlich alles geklärt.

Die Idee, bei einem falschen Paramter die Ausnahme IllegalArgumentException zu werfen ist übrigens sehr gut und genau richtig!
 
Zuletzt bearbeitet:
danke erstmal an alle 😉 ,
ich werfe jetzt mit throw die IllegalArgumentException wie es SlaterB beschrieben hat in der Circle Klasse.
Außerdem habe ich eine Testklasse(JUnit) erstellt.
Dort erzeuge (try) ich eine kreis mit ungültigem Radius und fange (catch) das mit dem Auslösen der IllegalArgumentException auf.
JUnit bestätigt den Erfolg (Success) des Tests, wenn die Exception geworfen wurde.

Java:
//Success if exception has been thrown  because radius is 0 or negative
            try {
                circle3 = new Circle(-1, point1);
                fail("no exception");
            } catch (IllegalArgumentException e) {
                System.out.println("Success");
            }

hasenfuss
 

Zurück
Oben