Java: BMI Rechner funktioniert nicht ganz?

4 Antworten

Weiß jemand den Fehler?

Du verwendest % zur Division. Das ist der Modulo-Operator und gibt dir den Rest einer Division zurück.

Beispiel:

5 % 2 = 1

Da du eine Division willst, solltest du / nutzen (wobei einer der Partner ein Float sein sollte, was bei dir gegeben ist). Wären beides Integer, wäre auch das Ergebnis ein Integer btw.

Woher ich das weiß:Studium / Ausbildung – Abgeschlossenes Studium der Informatik (B.Sc.)

ohwehohach  18.07.2022, 15:38

In Java gibt es keinen Unterschied zwischen ganzzahliger und dezimaler Division. Der Operator ist in beiden Fällen "/". Was rauskommt (int, long, float oder double) bestimmt sich anhand der an der Division beteiligten Datentypen.

xxxcyberxxx  18.07.2022, 15:40
@ohwehohach
In Java gibt es keinen Unterschied zwischen ganzzahliger und dezimaler Division. Der Operator ist in beiden Fällen "/". Was rauskommt (int oder double) bestimmt sich anhand der an der Division beteiligten Datentypen.

Jup, wie ich schon bei "DerEinsiedler" geantwortet hab: Bin unachtsam gewesen und in der Sprache verrutscht. Mir ist erstmal nicht aufgefallen, dass es Java ist, weil ich schlcihtweg nicht drauf geachtet hab. Ist für den Fehler prinzipiell auch egal - der sticht direkt heraus, wenn man weiß, was die Operanten tun

ohwehohach  18.07.2022, 15:42
@xxxcyberxxx

Hatte ich nicht lesen können, weil mein Kommentar nur 5 Sekunden nach Deinem gepostet wurde - wir haben also gleichzeitig geschrieben ;-)

Ja, für die Frage ist es tatsächlich egal - Hauptsache Division statt Modulo.

Habe das auch nur kommentiert, weil es ja eben Sprachen gibt, in denen es unterschiedliche Symbole für ganzzahlige Division und dezimale Division gibt.

xxxcyberxxx  18.07.2022, 15:43
@ohwehohach
Habe das auch nur kommentiert, weil es ja eben Sprachen gibt, in denen es unterschiedliche Symbole für ganzzahlige Division und dezimale Division gibt.

genau deswegen hat meine Antwort das auch zuerst enthalten. War irgendwie bei Python gelandet, die eben / und // nutzen ^^

DerEinsiedler  18.07.2022, 15:37

Auch bei einer Division ohne Komma würde er kein % verwenden wollen....

xxxcyberxxx  18.07.2022, 15:38
@DerEinsiedler
Auch bei einer Division ohne Komma würde er kein % verwenden wollen....

IOch hab auch nie gesagt, dass er % nutzen soll, und es direkt darüber erklärt, WARUM da der Fehler kommt

Für die (schon gelöschte) Erweiterung, dass man auch // nutzen könnte, war ich etwas abgelenkt und in der Sprache verrutscht - mir ist erst danach aufgefallen, dass es sich um Java handelt, da ich schlichtweg nicht drauf geachtet hab und der Fehler universell in den meisten Sprachen so auftreten würde

verreisterNutzer  18.07.2022, 15:41
@xxxcyberxxx

Hey, zunächst Danke! Ich wollte noch fragen wenn ich das Ergebnis habe, wie ich die Kommastellen verschieben kann? Also es kommt 0.0018065633 und ich müsste es in 18,065633 angeben.

xxxcyberxxx  18.07.2022, 15:42
@verreisterNutzer
Ich wollte noch fragen wenn ich das Ergebnis habe, wie ich die Kommastellen verschieben kann? Also es kommt 0.0018065633 und ich müsste es in 18,065633 angeben.

So wie du auch in der normalen Mathematik das Komma verschieben würdest: Mutliplikation mit dem Vielfachen von 10 ... In deinem Fall eben 10000

BorisG2011  18.07.2022, 17:18
@xxxcyberxxx

Die Formel für den Body-Mass-Index verlangt die Körpergröße in Metern (z.B. 1,85 m). Wenn die Größe in Metern eingegeben wird, ist eine anschließende Verschiebung des Kommas nicht erforderlich. Du scheinst aber die Größe in Zentimetern einzugeben und da die Körpergröße in der Formel quadriert wird, ergibt sich deshalb der Korrekturfaktor 10.000.

Es ist sinnvoll, in den Eingabeaufforderungen anzugeben, in welcher Einheit der benötigte Wert anzugeben ist. Darüber hinaus wäre zu erwägen, erkennbar unsinnige Eingabewerte zurückzuweisen.

Wenn mit einer grafischen Benutzeroberfläche gearbeitet wird, ist es gelegentlich möglich, grob fehlerhafte Eingabewerte dadurch zu verhindern, dass für die Dateneingabe geeignete Bedienelemente, z.B. Schieberegler, bereitgestellt werden.

Du verwendest nicht die Division, sondern den Modulo-Operator. Der berechnet den Rest der Division. Das ist was anderes (und in diesem Fall falsch).

Es musst heißen:

float ergebnis = gewicht / (groesse * groesse);

Bei der Berechnung steht ein % zeichen, sollte das nicht ein / zeichen sein?

(ist der Unterschied 60.5 oder 60,5 relevant? also Komma-Punkt)

Versuch doch mal deine Programme bei Fehlern zu debuggen... oder wenigstens die Zwischenwerte von Variable auszugeben.

Dann hast Du den Fehler sofort und von alleine.

Hier in diesem Fall... Du willst vielleicht kein % verwenden?