Jiný

Mac [Java] double nelze zrušit

D

DaveTaylor

Původní plakát
6. listopadu 2007
Aberdeenshire, Skotsko
  • 25. ledna 2010
Kód: |_+_|
Pomoc? lol

iShater

13. srpna 2002


Chicagoland
  • 25. ledna 2010
Můžete zveřejnit skutečnou chybu? Proč je váš návratový příkaz před koncem vaší metody? S

stanl8

24. prosince 2009
Manchester, Spojené království
  • 25. ledna 2010
Nejprve byste to měli zkusit
návrat ('' + BMI);
To znamená, že operátor '+' provede zřetězení.

Za druhé, nechápu, kdy se ty příkazy if někdy provedou, protože výše máte příkaz return, který se vždy provede D

DaveTaylor

Původní plakát
6. listopadu 2007
Aberdeenshire, Skotsko
  • 25. ledna 2010
iShater řekl: Můžete zveřejnit skutečnou chybu? Proč je váš návratový příkaz před koncem vaší metody? Kliknutím rozbalíte...

Skutečná chyba je dvojnásobná, nelze ji dereferencovat.

Cromulent

2. října 2006
Země naděje a slávy
  • 25. ledna 2010
Nejprve se vrátíte, než zasáhnete své if.. else prohlášení, což znamená, že nebudou nikdy zavoláni.

Za druhé, vaše metoda vrací double, ale vy se pokoušíte vrátit řetězec ve vašich příkazech if.. else.

Za třetí, když voláte metodu toString(), musíte místo primitivního typu použít objekt Double. Takže byste měli deklarovat BMI jako Double (java.lang.Double) spíše než double.

Zde je jednoduchý příklad:

Kód: |_+_|

chown33

Moderátor
Zaměstnanec
9. srpna 2009
Propastná rovina
  • 25. ledna 2010
DaveTaylor řekl: Skutečná chyba je dvojnásobná, nelze ji dereferencovat. Kliknutím rozbalíte...

Za prvé, nemůžete udělat toto:
Kód: |_+_|
protože BMI je deklarováno jako dvojnásobek , primitivní typ. Jak si vzpomínám, Java v této situaci neprovádí autoboxing.

Pokud by BMI bylo deklarováno jako Dvojnásobek , třída wrapper pro primitivní typ, pak by to mohlo fungovat...

Kromě toho, že nemůžete udělat toto:
Kód: |_+_|
protože Java automaticky nepřidává () za vás. Pokud chcete na objektu vyvolat metodu toString, musíte ji napsat jako vyvolání metody:
Kód: |_+_|
Pokud nepoužíváte tutoriál nebo knihu, opravdu byste měli.

lee1210

10. ledna 2005
Dallas, TX
  • 25. ledna 2010
Jen jsem chtěl přidat k dosavadním dobrým postřehům tím, že jsem navrhl použití metody valueOf(double) java.lang.String. Můžete to spustit a získat zpět řetězec. Použití operátoru String + double funguje také dobře, ale není potřeba, pokud vše, co chcete, je řetězcová reprezentace double.

-Číst C

cx300

12. září 2008
Clermont, FL
  • 25. ledna 2010
Moje java je trochu rezavá, ale mělo by to být správné...

Kód: |_+_|

chown33

Moderátor
Zaměstnanec
9. srpna 2009
Propastná rovina
  • 25. ledna 2010
cx300 řekl: Moje java je trochu rezavá, ale mělo by to být správné...

Kód: |_+_| Kliknutím rozbalíte...

Když je výpočet (váha/(hmotnost *hmotnost)) bez dalších koeficientů, jednotky výšky jsou metry a jednotky hmotnosti (hmotnosti) jsou kilogramy. Pokud výška může mít pouze celé metry (1, 2, 3), máte vážný problém s přesností.

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

Tyto typy také nikdy neposkytnou ve výsledku žádnou zlomkovou hodnotu, protože výpočet se provádí výhradně v celočíselné aritmetice (tj. zkrácením dělení), poté se celočíselný výsledek převede na dvojnásobek. Pokud chcete dvojitý výpočet s možností zlomkové části, musí být alespoň jeden operand typu double.

Nemyslím si, že se tento problém týká pouze Javy. Podobné problémy byste měli v C, které má podobná pravidla pro celočíselnou a dvojitou aritmetiku.