Sonstiges

Mac [Java] double kann nicht dereferenziert werden

D

DaveTaylor

Originalplakat
6. November 2007
Aberdeenshire, Schottland
  • 25.01.2010
Code: |_+_|
Hilfe? lol

iShater

13. August 2002


Chicagoland
  • 25.01.2010
Kannst du den tatsächlichen Fehler posten? Warum steht Ihre return-Anweisung vor dem Ende Ihrer Methode? S

stanl8

24. Dezember 2009
Manchester, Großbritannien
  • 25.01.2010
Als erstes solltest du es versuchen
zurück ('' + BMI);
Das heißt, der '+'-Operator führt eine Verkettung durch.

Zweitens verstehe ich nicht, wann diese if-Anweisungen jemals ausgeführt werden, weil Sie darüber eine return-Anweisung haben, die immer ausgeführt wird D

DaveTaylor

Originalplakat
6. November 2007
Aberdeenshire, Schottland
  • 25.01.2010
iShater sagte: Können Sie den tatsächlichen Fehler posten? Warum steht Ihre return-Anweisung vor dem Ende Ihrer Methode? Zum erweitern klicken...

Der tatsächliche Fehler ist doppelt und kann nicht dereferenziert werden.

Cromulent

2. Okt. 2006
Das Land der Hoffnung und des Ruhms
  • 25.01.2010
Zuallererst kehren Sie zurück, bevor Sie Ihre if.. else-Anweisungen treffen, was bedeutet, dass sie nie aufgerufen werden.

Zweitens gibt Ihre Methode ein Double zurück, aber Sie versuchen, einen String in Ihren if.. else-Anweisungen zurückzugeben.

Drittens müssen Sie beim Aufrufen der Methode toString() das Objekt Double anstelle des primitiven Typs verwenden. Sie sollten den BMI also als Double (java.lang.Double) und nicht als Double deklarieren.

Hier ist ein einfaches Beispiel:

Code: |_+_|

chown33

Moderator
Mitarbeiter
9. August 2009
die abgründige Ebene
  • 25.01.2010
DaveTaylor sagte: Der tatsächliche Fehler ist doppelt und kann nicht dereferenziert werden. Zum erweitern klicken...

Erstens können Sie dies nicht tun:
Code: |_+_|
weil BMI deklariert ist als doppelt , der primitive Typ. Java führt in dieser Situation kein Autoboxing durch, soweit ich mich erinnere.

Wenn BMI deklariert würde als Doppelt , die Wrapper-Klasse für den primitiven Typ, dann könnte es funktionieren...

Außer dass Sie dies nicht tun können:
Code: |_+_|
weil Java () nicht automatisch für Sie hinzufügt. Wenn Sie die toString-Methode für ein Objekt aufrufen möchten, müssen Sie sie als Methodenaufruf schreiben:
Code: |_+_|
Wenn Sie kein Tutorial oder Buch verwenden, sollten Sie es wirklich sein.

lee1210

10. Januar 2005
Dallas, TX
  • 25.01.2010
Ich wollte nur die guten Beobachtungen ergänzen, die bisher gemacht wurden, indem ich die Verwendung der Methode valueOf(double) von java.lang.String vorschlug. Sie können dies ausführen und einen String zurückerhalten. Die Verwendung des Operators String + double funktioniert auch gut, wird aber nicht benötigt, wenn Sie nur die String-Darstellung eines Doubles wünschen.

-Lesen C

cx300

12.09.2008
Clermont, FL
  • 25.01.2010
Mein Java ist ein wenig eingerostet, aber das sollte stimmen...

Code: |_+_|

chown33

Moderator
Mitarbeiter
9. August 2009
die abgründige Ebene
  • 25.01.2010
cx300 sagte: Mein Java ist ein wenig eingerostet, aber das sollte richtig sein ...

Code: |_+_| Zum erweitern klicken...

Wenn die Berechnung (Gewicht/(Masse * Masse)) ohne andere Koeffizienten ist, sind die Höheneinheiten Meter und die Masseneinheiten (Gewicht) Kilogramm. Wenn die Höhe nur ganzzahlige Meter (1, 2, 3) annehmen kann, haben Sie ein ernsthaftes Präzisionsproblem.

http://en.wikipedia.org/wiki/Body_mass_index

Außerdem werden diese Typen niemals einen Bruchwert im Ergebnis erzeugen, da die Berechnung vollständig in ganzzahliger Arithmetik (d. h. abschneidender Division) ausgeführt wird, dann wird das ganzzahlige Ergebnis in Double umgewandelt. Wenn Sie eine Double-Berechnung mit der Möglichkeit eines Bruchteils wünschen, muss mindestens ein Operand vom Typ double sein.

Ich glaube nicht, dass dieses Problem nur bei Java auftritt. Sie hätten ähnliche Probleme in C, das ähnliche Regeln für Integer- und Double-Arithmetik hat.