Andet

Mac [Java]-dobbelt kan ikke skelnes fra

D

DaveTaylor

Original plakat
6. november 2007
Aberdeenshire, Skotland
  • 25. januar 2010
Kode: |_+_|
Hjælp? lol

iShater

13. august 2002


Chicagoland
  • 25. januar 2010
Kan du poste den faktiske fejl? Hvorfor er din returopgørelse før slutningen af ​​din metode? S

stanl8

24. december 2009
Manchester, Storbritannien
  • 25. januar 2010
Først og fremmest bør du prøve
return ('' + BMI);
Det vil sige, at '+'-operatoren udfører sammenkædning.

For det andet forstår jeg ikke, hvornår disse if-sætninger nogensinde vil blive eksekveret, fordi du har en retursætning ovenfor, som altid vil udføres D

DaveTaylor

Original plakat
6. november 2007
Aberdeenshire, Skotland
  • 25. januar 2010
iShater sagde: Kan du sende den faktiske fejl? Hvorfor er din returopgørelse før slutningen af ​​din metode? Klik for at udvide...

Den faktiske fejl er dobbelt, kan ikke afreferences.

Cromulent

2. oktober 2006
Landet med håb og herlighed
  • 25. januar 2010
Først og fremmest vender du tilbage, før du rammer dine if.. else-udsagn, hvilket betyder, at de aldrig bliver kaldt.

For det andet returnerer din metode en fordobling, men du forsøger at returnere en streng i dine if..else-sætninger.

For det tredje, når du kalder toString()-metoden, skal du bruge objektet Double frem for den primitive type. Så du bør erklære BMI som dobbelt (java.lang.Double) i stedet for dobbelt.

Her er et simpelt eksempel:

Kode: |_+_|

chown33

Moderator
Medarbejder
9. august 2009
det afgrundsdybe plan
  • 25. januar 2010
DaveTaylor sagde: Den faktiske fejl er dobbelt, kan ikke afvises. Klik for at udvide...

For det første kan du ikke gøre dette:
Kode: |_+_|
fordi BMI er deklareret som dobbelt , den primitive type. Java udfører ikke autoboxing i denne situation, som jeg husker det.

Hvis BMI blev erklæret som Dobbelt , indpakningsklassen for den primitive type, så virker det måske...

Bortset fra at du ikke kan gøre dette:
Kode: |_+_|
fordi Java ikke automatisk tilføjer ()'er til dig. Hvis du vil kalde toString-metoden på et objekt, skal du skrive den som en metodekald:
Kode: |_+_|
Hvis du ikke bruger et selvstudie eller en bog, burde du virkelig være det.

lee1210

10. januar 2005
Dallas, TX
  • 25. januar 2010
Jeg ville bare tilføje de gode observationer, der er gjort indtil videre, ved at foreslå brugen af ​​java.lang.String's valueOf(double) metode. Du kan køre dette og få en String tilbage. Brug af String + double-operatoren fungerer også fint, men er ikke nødvendig, hvis alt, hvad du ønsker, er String-repræsentationen af ​​en double.

-Læs C

cx300

12. september 2008
Clermont, FL
  • 25. januar 2010
Min java er lidt rusten, men det burde være rigtigt...

Kode: |_+_|

chown33

Moderator
Medarbejder
9. august 2009
det afgrundsdybe plan
  • 25. januar 2010
cx300 sagde: Min java er lidt rusten, men det burde være rigtigt...

Kode: |_+_| Klik for at udvide...

Når beregningen er (vægt/(masse * masse)) uden andre koefficienter, er højdeenhederne meter og masseenhederne (vægt) kilogram. Hvis højden kun kan antage heltal meter (1, 2, 3), har du et alvorligt præcisionsproblem.

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

Disse typer vil heller aldrig give nogen brøkværdi i resultatet, fordi beregningen udføres udelukkende i heltalsaritmetik (dvs. trunkeringsdivision), så konverteres heltalsresultatet til det dobbelte. Ønsker man dobbeltregning med mulighed for brøkdel, skal mindst én operand være af typen dobbelt.

Jeg tror ikke, at dette problem er unikt for Java. Du ville have lignende problemer i C, som har lignende regler for heltal og dobbelt aritmetik.