Wieso kann immer noch durch Null geteilt werden?

5 Antworten

Die Variable Zahl 2 ist ein double, die zahl die du angibst zum Vergleich aber ein integer "0".

Entweder du rechnest nur mit Ints, was du wohl nicht willst, oder du schreibst statt "0" den Wert als double, also "0.". Ja, der punkt ist relevant.

Mal davon abgesehen, dass zahl2 noch undefiniert / null ist, wenn du die funktion aufrufst.

Sollte statt "if(zahl2==0)" eigentlich "if(zahl2E==0.0)" stehen. Darum sollte man bessere Namen deinen Variablen geben und obwohl die meisten Interpreter 0 und 0.0 gleich interpretieren, sollte man schon wenn man double benutzt auch zu einem double vergleichen.

Gehrsitz  27.09.2022, 09:10

In einem Java-Code sollte man den Vergleich auf 0.0 bzw. 0 vermeiden, da Double ein Floating-Wert ist und nie den Wert 0 sondern bspw. 0.0000000001 hat.

0

Also zunächst einmal kann dein Code so gar nicht kompiliert werden.

Denn:

die Methode rechnung muss IMMER ein double zurück geben. Im Fall dass zahl2 gleich 0 ist, wird jedoch nichts zurück gegeben.

Nun angenommen dieses Problem wäre behoben:
Deine Methode prüft ja nicht ob die zahl2E 0 ist. Es wird also nicht geprüft ob deine Methode mit einer 0 aufgerufen wird. Sondern es wird geprüft ob die gespeicherte Zahl (des letzten Methoden-Aufrufs) eine 0 war. Das macht so eigentlich wenig Sinn.

Wieso braucht du die Klassenvariablen zahl1 und zahl2 überhaupt?

Für mich ist die Funktion - die keine ist - im Großen und Ganzen einigermaßen okay. Funktionieren kann das Ganze schon mal nicht, weil zahl2 in der if-Klausel geprüft wird, aber zahl2E gemeint ist.

Dann gibt es noch das Problem das die Klammer

Die Klasse ist ungeschickt gebaut und definitiv nicht für Mehrfachaufruf gemacht. Besser wäre es ohne Klassen-Variablen zu arbeiten und alle unmittelbar in der Methode abzuarbeiten:

public double rechnung(double zahl1E, double zahl2E)

  {

   if(zahl2E==0)

{ System.out.println("Das teilen durch Null ist nicht möglich.");}

  else

  {return zahl1E / zahl2E;}

}

Woher ich das weiß:Berufserfahrung – Startup zum weltweiten Unternehmen entwickelt.

Du fragst auf zahl2 ab bevor du ihr einen Wert zuweist und die ist nicht initialisiert mit 0. Die Variable die du übergibst ist zahl2E nicht zahl2