Inne

Mac [Java] double nie może być wyłuskany

D

Dave Taylor

Oryginalny plakat
6 listopada 2007
Aberdeenshire, Szkocja
  • 25 stycznia 2010
Kod: |__+_|
Pomoc? kupa śmiechu

iShater

13 sierpnia 2002


Chicagoland
  • 25 stycznia 2010
Czy możesz opublikować rzeczywisty błąd? Dlaczego twoje oświadczenie zwrotne jest przed końcem twojej metody? S

stanl8

24 grudnia 2009
Manchester, Wielka Brytania
  • 25 stycznia 2010
Przede wszystkim powinieneś spróbować
powrót ('' + BMI);
Oznacza to, że operator „+” wykona konkatenację.

Po drugie, nie rozumiem, kiedy te instrukcje if zostaną kiedykolwiek wykonane, ponieważ powyżej znajduje się instrukcja return, która zawsze zostanie wykonana D

Dave Taylor

Oryginalny plakat
6 listopada 2007
Aberdeenshire, Szkocja
  • 25 stycznia 2010
iShater powiedział: Czy możesz opublikować rzeczywisty błąd? Dlaczego twoje oświadczenie zwrotne jest przed końcem twojej metody? Kliknij aby rozszerzyć...

Rzeczywisty błąd jest podwójny, nie można go wyłuskać.

Cromulent

2 paź 2006
Kraina nadziei i chwały
  • 25 stycznia 2010
Przede wszystkim wracasz, zanim trafisz w swoje oświadczenia if.. else, co oznacza, że ​​nigdy nie zostaną wywołani.

Po drugie, Twoja metoda zwraca double, ale próbujesz zwrócić ciąg znaków w swoich instrukcjach if.. else.

Po trzecie, podczas wywoływania metody toString() musisz użyć obiektu Double, a nie typu pierwotnego. Dlatego powinieneś zadeklarować BMI jako Double (java.lang.Double), a nie jako double.

Oto prosty przykład:

Kod: |__+_|

chown33

Moderator
Pracownik
9 sierpnia 2009
Płaszczyzna Otchłani
  • 25 stycznia 2010
DaveTaylor powiedział: rzeczywisty błąd jest podwójny, nie można go wyłuskać. Kliknij aby rozszerzyć...

Po pierwsze, nie możesz tego zrobić:
Kod: |__+_|
ponieważ BMI jest deklarowane jako podwójnie , typ pierwotny. Java nie wykonuje w tej sytuacji autoboxingu, o ile pamiętam.

Jeśli BMI zadeklarowano jako Podwójnie , klasa opakowująca dla typu pierwotnego, to może zadziałać...

Tyle że nie możesz tego zrobić:
Kod: |__+_|
ponieważ Java nie dodaje automatycznie () za Ciebie. Jeśli chcesz wywołać metodę toString na obiekcie, musisz napisać ją jako wywołanie metody:
Kod: |__+_|
Jeśli nie korzystasz z samouczka lub książki, naprawdę powinieneś.

lee1210

10 stycznia 2005 r.
Dallas, Teksas
  • 25 stycznia 2010
Chciałem tylko dodać do dobrych obserwacji poczynionych do tej pory, sugerując użycie metody valueOf(double) java.lang.String. Możesz to uruchomić i odzyskać String. Użycie operatora String + double również działa dobrze, ale nie jest potrzebne, jeśli wszystko, czego potrzebujesz, to reprezentacja ciągu typu double.

-Czytać C

cx300

12 września 2008 r.
Clermont, Floryda
  • 25 stycznia 2010
Moja Java jest trochę zardzewiała, ale to powinno być w porządku...

Kod: |__+_|

chown33

Moderator
Pracownik
9 sierpnia 2009
Płaszczyzna Otchłani
  • 25 stycznia 2010
cx300 powiedział: Moja java jest trochę zardzewiała, ale to powinno być w porządku...

Kod: |__+_| Kliknij aby rozszerzyć...

W przypadku obliczenia (waga/(masa * masa)) bez innych współczynników, jednostkami wzrostu są metry, a jednostkami masy (masy) są kilogramy. Jeśli wysokość może przyjmować tylko metry całkowite (1, 2, 3), masz poważny problem z precyzją.

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

Ponadto te typy nigdy nie dadzą w wyniku żadnej wartości ułamkowej, ponieważ obliczenia są przeprowadzane w całości w arytmetyce liczb całkowitych (tj. Dzielenie obcinające), a następnie wynik liczb całkowitych jest konwertowany na liczbę podwojoną. Jeśli chcesz wykonać podwójne obliczenie z możliwością części ułamkowej, co najmniej jeden operand musi być typu double.

Nie sądzę, że ten problem dotyczy wyłącznie Javy. Miałbyś podobne problemy w C, które ma podobne zasady dla arytmetyki liczb całkowitych i podwójnych.