Övrig

Mac [Java] dubbel kan inte avläsas

D

DaveTaylor

Originalaffisch
6 november 2007
Aberdeenshire, Skottland
  • 25 januari 2010
Kod: |_+_|
Hjälp? LOL

iShater

13 augusti 2002


Chicagoland
  • 25 januari 2010
Kan du posta det faktiska felet? Varför är ditt returutdrag före slutet av din metod? S

stanl8

24 december 2009
Manchester, Storbritannien
  • 25 januari 2010
Först och främst bör du prova
return ('' + BMI);
Det vill säga, '+'-operatorn kommer att utföra sammanlänkning.

För det andra, jag förstår inte när dessa if-satser någonsin kommer att köras eftersom du har en retursats ovan som alltid kommer att köras D

DaveTaylor

Originalaffisch
6 november 2007
Aberdeenshire, Skottland
  • 25 januari 2010
iShater sa: Kan du lägga upp själva felet? Varför är ditt returutdrag före slutet av din metod? Klicka för att expandera...

Det faktiska felet är dubbelt kan inte avläsas.

Cromulent

2 oktober 2006
Hoppets och ärans land
  • 25 januari 2010
Först och främst återvänder du innan du träffar dina if.. else uttalanden som betyder att de aldrig kommer att bli kallade.

För det andra returnerar din metod en dubbel men du försöker returnera en sträng i dina if.. else-satser.

För det tredje när du anropar metoden toString() måste du använda objektet Double istället för den primitiva typen. Så du bör deklarera BMI som dubbel (java.lang.Double) snarare än dubbel.

Här är ett enkelt exempel:

Kod: |_+_|

chown33

Moderator
Anställd
9 augusti 2009
det avgrundsdjupa planet
  • 25 januari 2010
DaveTaylor sa: Det faktiska felet är dubbelt kan inte avläsas. Klicka för att expandera...

För det första kan du inte göra detta:
Kod: |_+_|
eftersom BMI deklareras som dubbel , den primitiva typen. Java utför inte autoboxning i den här situationen, som jag minns.

Om BMI deklarerades som Dubbel , omslagsklassen för den primitiva typen, då kanske det fungerar...

Förutom att du inte kan göra detta:
Kod: |_+_|
eftersom Java inte automatiskt lägger till () för dig. Om du vill anropa toString-metoden på ett objekt, måste du skriva den som en metodanrop:
Kod: |_+_|
Om du inte använder en handledning eller en bok borde du verkligen vara det.

lee1210

10 januari 2005
Dallas, TX
  • 25 januari 2010
Jag ville bara lägga till de bra observationer som gjorts hittills genom att föreslå användning av java.lang.Strings valueOf(double)-metod. Du kan köra detta och få tillbaka en String. Att använda String + double-operatorn fungerar också bra, men behövs inte om allt du vill ha är String-representationen av en dubbel.

-Läsa C

cx300

12 september 2008
Clermont, FL
  • 25 januari 2010
Min java är lite rostig men det här borde stämma...

Kod: |_+_|

chown33

Moderator
Anställd
9 augusti 2009
det avgrundsdjupa planet
  • 25 januari 2010
cx300 sa: Min java är lite rostig men det här borde vara rätt...

Kod: |_+_| Klicka för att expandera...

När beräkningen är (vikt/(massa * massa)) utan andra koefficienter är höjdenheterna meter och massenheter (vikt) kilogram. Om höjden bara kan ta heltalsmeter (1, 2, 3) har du ett allvarligt precisionsproblem.

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

Dessa typer kommer heller aldrig att producera något bråktal i resultatet, eftersom beräkningen utförs helt i heltalsaritmetik (dvs trunkeringsdivision), då konverteras heltalsresultatet till dubbelt. Om du vill ha en dubbelberäkning med möjlighet till en bråkdel måste minst en operand vara av typen dubbel.

Jag tror inte att det här problemet är unikt för Java. Du skulle ha liknande problem i C, som har liknande regler för heltal och dubbel aritmetik.