Altres

El doble de Mac [Java] no es pot desreferenciar

D

Dave Taylor

Cartell original
6 de novembre de 2007
Aberdeenshire, Escòcia
  • 25 de gener de 2010
Codi: |_+_|
Ajuda? lol

iShater

13 d'agost de 2002


Chicagoland
  • 25 de gener de 2010
Pots publicar l'error real? Per què la vostra declaració de retorn és abans del final del vostre mètode? S

stanl8

24 de desembre de 2009
Manchester, Regne Unit
  • 25 de gener de 2010
Primer de tot hauries de provar
retorn ('' + IMC);
És a dir, l'operador '+' realitzarà la concatenació.

En segon lloc, no entenc quan s'executaran aquestes declaracions if perquè teniu una instrucció de retorn a sobre que sempre s'executarà D

Dave Taylor

Cartell original
6 de novembre de 2007
Aberdeenshire, Escòcia
  • 25 de gener de 2010
iShater va dir: Pots publicar l'error real? Per què la vostra declaració de retorn és abans del final del vostre mètode? Feu clic per ampliar...

L'error real és doble no es pot desreferenciar.

Cromulent

Oct 2, 2006
La terra de l'esperança i la glòria
  • 25 de gener de 2010
En primer lloc, torneu abans de colpejar les vostres declaracions if.. else, el que significa que mai seran trucades.

En segon lloc, el vostre mètode retorna un doble, però esteu intentant retornar una cadena a les vostres declaracions if.. else.

En tercer lloc, quan crideu al mètode toString() heu d'utilitzar l'objecte Double en lloc del tipus primitiu. Per tant, hauríeu de declarar l'IMC com a Doble (java.lang.Double) en lloc de doble.

Aquí teniu un exemple senzill:

Codi: |_+_|

chown33

Moderador
Membre del personal
9 d'agost de 2009
el pla abismal
  • 25 de gener de 2010
DaveTaylor va dir: L'error real és doble no es pot desreferenciar. Feu clic per ampliar...

Primer, no pots fer això:
Codi: |_+_|
perquè l'IMC es declara com doble , el tipus primitiu. Java no realitza autoboxing en aquesta situació, tal com recordo.

Si l'IMC es declarés com Doble , la classe d'embolcall per al tipus primitiu, llavors podria funcionar...

Excepte que no pots fer això:
Codi: |_+_|
perquè Java no afegeix automàticament () per a vostè. Si voleu invocar el mètode toString en un objecte, heu d'escriure-lo com a invocació de mètode:
Codi: |_+_|
Si no feu servir un tutorial o un llibre, realment hauríeu de fer-ho.

lee1210

10 de gener de 2005
Dallas, TX
  • 25 de gener de 2010
Només volia afegir a les bones observacions fetes fins ara suggerint l'ús del mètode valueOf(double) de java.lang.String. Podeu executar això i recuperar una cadena. L'ús de l'operador String + double també funciona bé, però no és necessari si tot el que voleu és la representació String d'un doble.

-Llegeix C

cx300

set 12, 2008
Clermont, FL
  • 25 de gener de 2010
El meu Java està una mica rovellat, però això hauria de ser correcte...

Codi: |_+_|

chown33

Moderador
Membre del personal
9 d'agost de 2009
el pla abismal
  • 25 de gener de 2010
cx300 va dir: El meu Java està una mica rovellat, però això hauria de ser correcte...

Codi: |_+_| Feu clic per ampliar...

Quan el càlcul és (pes/(massa * massa)) sense cap altre coeficient, les unitats d'alçada són metres i les unitats de massa (pes) són quilograms. Si l'alçada només pot prendre metres sencers (1, 2, 3), teniu un greu problema de precisió.

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

A més, aquests tipus mai no produiran cap valor fraccionari en el resultat, perquè el càlcul es realitza completament en aritmètica entera (és a dir, divisió truncada), llavors el resultat sencer es converteix en doble. Si es vol un càlcul doble amb possibilitat de part fraccionària, almenys un operand ha de ser del tipus double.

No crec que aquest problema sigui exclusiu de Java. Tindríeu problemes similars en C, que té regles similars per a l'aritmètica enter i doble.