BlueJ Programmierfehler NaN?

6 Antworten

Nachdem das NaN Problem nun geklärt ist, könnte man die Berechnung des Idealgewichts näher unter die Lupe nehmen.

Ich kenne die Formel "Körpergewicht in Zentimetern minus 100 minus 10% bei Männern oder 15 bis 20% bei Frauen" oder über den Body-Mass-Index (BMI):

Idealgewicht Formel: (Größe in m)

Idealgewicht Männer (unterer Bereich) = GRÖßE ² x 20

Idealgewicht Männer (oberer Bereich) = GRÖßE ² x 25

Idealgewicht Frauen (unterer Bereich) = GRÖßE ² x 19

Idealgewicht Frauen (oberer Bereich) = GRÖßE ² x 24

Mit gewicht / groesse² bekommst du keinen vernünftigen Wert. Das Idealgewicht ist sicher unabhängig vom aktuellen Gewicht. Bei einem 2-Meter Mann von 100 kg wäre das Idealgewicht nach deiner Rechnung 25 kg!

Vgl.: http://www.bmi-rechner.net/idealgewicht.htm

  1. Wenn du für die Größe einen Integer verwendest muss die Einheit aber "mm" sein.
  2. double differenz = gewicht - idealgewicht;
    Das provoziert Rundungsfehler. Außerdem gehst du davon aus, dass das eigene Gewicht stets größer ist als das Idealgewicht. Du solltest "Math.abs()" drum herum setzen oder eine andere Maßnahme anwenden, um diese Zahl stets positiv zu halten. (Andernfalls kann auch dein "zu dürr"-Fall nicht eintreten.)
  3. Da haben wir ja den Übeltäter!
    idealgewicht = gewicht / groesseZumQuadrat;
    Du teilst hier durch 0, denn "groesseZumQuadrat" ist eine Variable. Setzen vor die Zeile "idealgewicht = [...]" noch "groesseZumQuadrat();", das sollte den Fehler beheben.

Um die Differenz-Variable rum hat der Fragesteller auch einen logischen Fehler, sein Programm würde Idealgewicht diagnostizieren, wenn man genau 5 Kilo über dem Idealgewicht liegt. Wenn das eigene Gewicht dem Idealgewicht entspricht, dann würde das Programm den Untergewicht-Satz ausgeben. 

Das, was der Fragesteller "Idealgewicht" nennt, ist kein Gewicht, sondern der BMI-Wert und bei dem müsste man prüfen, ob der im Bereich 18,5 - 25, darunter oder darüber liegt... oder er müsste die BMI-Formel nach dem Gewicht umstellen. Da ist so einiges an Code logisch falsch.

https://de.wikipedia.org/wiki/Body-Mass-Index

0

Zu 1. Ob man für groesse Meter, Zentimeter oder Millimeter verwendet, ist eigentlich egal, in keinem Fall ergibt gewicht durch groesse^2 ein brauchbares Idealgewicht.

Zu 2. der Fall "zu dürr" tritt ein, wenn das Gewicht weniger als 5 über dem Idealgewicht liegt, also auch wenn es unter dem Idealgewicht liegt. Das Prädikat "krasser Lifestyle" erhält man nur, wenn die Differenz exakt 5 beträgt, also so gut wie nie. Das Problem bekommt man durch Math.abs() nicht in den Griff. Das zweite if sollte die Bedingung (differenz < -5) enthalten.

Btw: Wenn man mit der Beurteilung "Quark" etwas zurückhaltender ist, erspart man sich hämisches Grinsen, wenn man selbst Fehler macht.

0
@Schachpapa

Danke für deine Korrektur! Von mir aus könnt ihr alle gerne hämisch über meine Fehler grinsen, wenn ich mich dann auch so sachlich berichtigt wie du es so eloquent tatest, schließlich kann die Welt immer einen Lacher gebrauchen und da sind solche Ursachen nicht die schlechteste Quelle, die ich mir vorstellen kann! :D

0

Die Variablen haben alle den Wert 0 zugewiesen.

Wenn du dann bei der Berechnung des Idealgewichts durch 0 teilst, kommt natürlich NaN raus (Not a Number)

Setze von Null verschiedene Werte ein oder prüfe vorher, ob die Werte von Null verschieden sind.

Was möchtest Du wissen?