DriveByZero Exception - BMI-Rechner

haui95

Bekanntes Mitglied
Guten Tag,

ich habe mir in Java ein Programm zur Berechnung des BMI geschrieben, und zwar mit GUI, Splash Screen und einen eigenen Info Dialog. Jedoch habe ich nun ein Problem. Ich möchte eine ArithmeticException abfangen, falls in der Methode berechneBMI() die Größe durch 0 geteilt wird.
Ich rufe die Methode über einen ActionListener meines 3. Buttons auf, wobei die Methode berechneBMI() im ActionListener mit einem try-catch-Block versehen ist, um die anderen Exceptions, die bei Fehleingaben entstehen können, abzufangen.

Hier einmal der Code:

Java:
button3.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e) 
            {
                progressbar1.setValue(0);
                listbox1.removeAll();
                DecimalFormat format1 = new DecimalFormat();
                double bmi = 0;
               
                try
                {
                    bmi = berechneBMI(Float.parseFloat(edit1.getText()), Float.parseFloat(edit2.getText()));   //   <--  DriveByZeroException wird hier so nicht abgefangen.
                    format1 = new DecimalFormat("0.00");
                    edit3.setText(String.valueOf(format1.format(bmi)));
                }
                catch(Exception ex)
                {
                    JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                    edit1.setText("");
                    edit2.setText("");
                    return;
                }
                
                listbox1.add(vergleicheBMI(bmi));
                progressbar1.setValue(1);


Java:
public double berechneBMI(double groesse, double gewicht)
    {
        double result;
        result = 0;
        
        result = gewicht / power(groesse, 2);     //  <--  Hier soll eine DivideByZeroException abgefangen werden.
        
        return result;
    }
 
Zuletzt bearbeitet:

njans

Top Contributor
Und die eigentliche Frage?

BTW: Warum willst du die Abfangen? Du musst doch nur prüfen, ob der Divisor 0 ist.
Simple if Abfrage. Ich würde da vermutlich, je nachdem, ob die Eingabe durch den Nutzer gemacht wird, eventuell eine IllegalArgumentException werfen
 
Zuletzt bearbeitet:

haui95

Bekanntes Mitglied
Ja, die eigentliche Frage ist nun, wie ich eine ArithmeticException entweder in der Funktion oder in dem Buttonhandler, also dem ActionListener, abfangen kann. Ich möchte also, dass mein Programm mir sowohl eine Exception bei Fehleingaben abfängt, als auch eine DivideByZero Exception bei der Division durch 0. Ich habe ja das Problem, dass das Programm mir im try-catch-Block des ActionListeners zwar Fehleingaben abfängt, jedoch bei der Division durch 0 keine Meldung anzeigt.

Vielen Dank im Voraus ! :)
 

Fant

Bekanntes Mitglied
Du kannst auch mehrere catch-Blöcke für ein try definieren, falls dir das hilft. So kannst du auf unterschiedliche Exceptions unterschiedlich reagieren. ... aber dein eigentliches Problem ist mir immer noch nicht wirklich klar.
 

haui95

Bekanntes Mitglied
So habe es nun mit Hilfe von njans gelöst. Ich werfe einfach in der Funktion berechneBMI() eine Exception, wenn die Größe gleich null ist. Diese fange ich wieder ab und sage dem ActionListener, dass eine Exception ausgelöst wurde. Und ab dem Zeitpunkt werden die weiteren Methoden und Instruktionen nicht mehr ausgeführt.

Hier der Code:

Java:
    public double berechneBMI(double groesse, double gewicht)
    {
        double result;
        result = 0;
        
        if (groesse <= 0)
        {
            throw new IllegalArgumentException();
        }
        
        try
        {
            result = gewicht / power(groesse, 2);
        }
        catch(IllegalArgumentException ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
        
        return result;
    }


Java:
        button3.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e) 
            {
                progressbar1.setValue(0);
                listbox1.removeAll();
                DecimalFormat format1 = new DecimalFormat();
                double bmi = 0;
               
                try
                {
                    bmi = berechneBMI(Float.parseFloat(edit1.getText()), Float.parseFloat(edit2.getText()));
                    format1 = new DecimalFormat("0.00");
                    edit3.setText(String.valueOf(format1.format(bmi)));
                }
                catch(Exception ex)
                {
                    JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                    edit1.setText("");
                    edit2.setText("");
                    edit3.setText("");
                    edit3.setBackground(null);
                    return;
                }
                
                listbox1.add(vergleicheBMI(bmi));
                progressbar1.setValue(1);
            }
        });
 
Zuletzt bearbeitet:

Fant

Bekanntes Mitglied
Was soll der try-catch-Block in der berechneBMI-Methode. Da wird doch niemals eine entsprechende Exception in dem try-Bock geworfen... und selbst wenn, dann fängst du die doch eh später zwingend ab.

Wenn deine Methode eine IllegalArgumentException wirft, dann sollte sie auch
Code:
public double berechneBMI(double groesse, double gewicht) throws IllegalArgumentException { ...
heißen.
 
Zuletzt bearbeitet:

haui95

Bekanntes Mitglied
Ja, es funktioniert zwar, aber wie könnte ich es denn dann besser lösen, also z.B. kürzer schreiben oder optimieren ? ;-)
 

Fant

Bekanntes Mitglied
Ja, es funktioniert zwar, aber wie könnte ich es denn dann besser lösen, also z.B. kürzer schreiben oder optimieren ? ;-)

Einfach nur:

Java:
public double berechneBMI(double groesse, double gewicht) throws IllegalArgumentException
    {        
        if (groesse <= 0)
            throw new IllegalArgumentException();
        return gewicht / power(groesse, 2);
    }

Gruß Fant

Edit: Jetzt aber ^.^
 

haui95

Bekanntes Mitglied
Danke Fant :)

Aber den try-Block im ActionListener kann ich so lassen !?
Was passiert denn jetzt in der berechneBMI()-Methode ? Wirft die Methode eine Exception und behandelt diese im try-catch-block des ActionListeners ?

MfG

Hauke
 

Fant

Bekanntes Mitglied
Wenn groesse kleiner oder gleich Null ist, dann wird eine Exception geworfen. Die Methode wird dann nicht mehr weiter ausgeführt.
Da im try-Block im ActionListener nun eine Exception ankommt wird auch dieser nicht mehr ausgeführt, sondern dein Programm springt in den catch-Block, wo du auf die Exception entsprechend deinen Vorstellungen reagieren kannst.
 

xehpuk

Top Contributor
Ich möchte eine ArithmeticException abfangen, falls in der Methode berechneBMI() die Größe durch 0 geteilt wird.
Wo keine ArithmeticException ist, kann man auch keine abfangen. Bei Gleitkommazahlen gibts nie eine:
Java:
public class FloatDivideByZero {
	public static void main(String... args) {
		System.out.println(1 / 0f);
		System.out.println(0 / 0f);
		System.out.println(-1 / 0f);
	}
}
Wenn deine Methode eine IllegalArgumentException wirft, dann sollte sie auch
Code:
public double berechneBMI(double groesse, double gewicht) throws IllegalArgumentException { ...
heißen.
Nein. RuntimeExceptions sollte man eher nicht in die throws clause setzen.
 

ssoul26

Bekanntes Mitglied
Bau doch dein Try-Catch einfach flexibler. Da kannst alle Exceptions einzeln bearbeiten.

Java:
try{
.....
.....
}catch (Exception ex){

      if(ex instanceof ArithmeticException){
         //Hier abarbeiten was bei dieser Exception passieren soll
      }else{
      System.out.println("Exception : "+ ex.getMessage());
      }

}
 

njans

Top Contributor
Du kannst auch mehrere catch-Blöcke für ein try definieren, falls dir das hilft. So kannst du auf unterschiedliche Exceptions unterschiedlich reagieren. ... aber dein eigentliches Problem ist mir immer noch nicht wirklich klar.

So sollte man das dann eher machen:

Java:
        try
		{
			// Irgendwas
		}
		catch (IOException exception) // Exception nach Genauigkeit ordnen!
		{
			// handle exception
		}
		catch (Exception exception) // Als letztes kommt dann der allgemeinste tTyp.
                { 
			// handle exception
		}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
1 Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
J Exception unreachable Java Basics - Anfänger-Themen 12
O unchecked Exception Java Basics - Anfänger-Themen 4
P Exception werfen Java Basics - Anfänger-Themen 15
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
I OOP Was ist die "Exception Hierarchie" ? Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
Mosquera Exception Java Basics - Anfänger-Themen 5
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
N Nullpointer exception Java Basics - Anfänger-Themen 4
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
S Array Grenzen-Exception Java Basics - Anfänger-Themen 11
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
G Arrays out of Bounds exception Java Basics - Anfänger-Themen 2
H Compiler-Fehler Out of Bunce Exception bei einem Char Java Basics - Anfänger-Themen 6
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
C Null Pointer Exception Java Basics - Anfänger-Themen 10
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
G Null Pointer Exception Java Basics - Anfänger-Themen 4
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
O Exception bei Parse-Vorgang Java Basics - Anfänger-Themen 17
T Exception Problem Java Basics - Anfänger-Themen 5
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
L Input/Output InputMismatch.Exception Java Basics - Anfänger-Themen 7
B Exception Liste von Liste Java Basics - Anfänger-Themen 3
D Throw Exception Java Basics - Anfänger-Themen 2
MiMa JavaDoc Exception @throws schlagen an Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
B Exception richtig einbinden Java Basics - Anfänger-Themen 1
M Exception soll Werte mitgeliefert bekommen Java Basics - Anfänger-Themen 12
M Selbstdefinierte Exception Java Basics - Anfänger-Themen 5
B Exception Throwable Java Basics - Anfänger-Themen 11
M Erste Schritte Start Methode - Exception Java Basics - Anfänger-Themen 1
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
H Erste Schritte Exception: 0 Java Basics - Anfänger-Themen 2
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Exception nur im "Debug"-Modus und jedem 3.-5. mal Ausführen Java Basics - Anfänger-Themen 3
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
R "Missbrauch" von Exception zum Programmfluss Java Basics - Anfänger-Themen 1
U Exception: OutOfMemoryError Java Basics - Anfänger-Themen 11
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
F Java exception bei der Ausführung Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben