Alte

Mac [Java] double nu poate fi dereferențiat

D

DaveTaylor

Poster original
6 noiembrie 2007
Aberdeenshire, Scoția
  • 25 ianuarie 2010
Cod: |_+_|
Ajutor? laugh out Loud

iShater

13 august 2002


Chicagoland
  • 25 ianuarie 2010
Poti posta eroarea reala? De ce declarația dvs. de returnare este înainte de sfârșitul metodei dvs.? S

stanl8

24 decembrie 2009
Manchester, Marea Britanie
  • 25 ianuarie 2010
În primul rând ar trebui să încerci
întoarcere ('' + IMC);
Adică, operatorul „+” va efectua concatenarea.

În al doilea rând, nu înțeleg când vor fi executate acele instrucțiuni if, deoarece aveți o instrucțiune return mai sus care se va executa întotdeauna D

DaveTaylor

Poster original
6 noiembrie 2007
Aberdeenshire, Scoția
  • 25 ianuarie 2010
iShater a spus: Puteți posta eroarea reală? De ce declarația dvs. de returnare este înainte de sfârșitul metodei dvs.? Faceți clic pentru a extinde...

Eroarea reală este dublă nu poate fi dereferentă.

Cromulent

2 octombrie 2006
Țara Speranței și a Gloriei
  • 25 ianuarie 2010
În primul rând, te întorci înainte de a-ți lovi declarațiile if.. else, ceea ce înseamnă că nu vor fi apelați niciodată.

În al doilea rând, metoda dvs. returnează un dublu, dar încercați să returnați un șir în instrucțiunile if.. else.

În al treilea rând, atunci când apelați metoda toString() trebuie să utilizați obiectul Double mai degrabă decât tipul primitiv. Deci, ar trebui să declarați IMC ca dublu (java.lang.Double) și nu dublu.

Iată un exemplu simplu:

Cod: |_+_|

chown33

Moderator
Membru al personalului
9 august 2009
planul abisal
  • 25 ianuarie 2010
DaveTaylor a spus: Eroarea reală este dublă nu poate fi anulată de referință. Faceți clic pentru a extinde...

În primul rând, nu poți face asta:
Cod: |_+_|
deoarece IMC este declarat ca dubla , tipul primitiv. Java nu efectuează autoboxing în această situație, după cum îmi amintesc.

Dacă IMC ar fi declarat ca Dubla , clasa wrapper pentru tipul primitiv, atunci ar putea funcționa...

Cu excepția faptului că nu poți face asta:
Cod: |_+_|
deoarece Java nu adaugă automat () pentru tine. Dacă doriți să invocați metoda toString pe un obiect, trebuie să o scrieți ca invocare a unei metode:
Cod: |_+_|
Dacă nu folosești un tutorial sau o carte, chiar ar trebui să o faci.

lee1210

10 ianuarie 2005
Dallas, TX
  • 25 ianuarie 2010
Am vrut doar să adaug la observațiile bune făcute până acum, sugerând utilizarea metodei valueOf(double) de la java.lang.String. Puteți rula acest lucru și obțineți un String înapoi. Folosirea operatorului String + dublu funcționează bine, de asemenea, dar nu este necesară dacă tot ceea ce doriți este reprezentarea String a unui dublu.

-Citit C

cx300

12 septembrie 2008
Clermont, FL
  • 25 ianuarie 2010
Java-ul meu este puțin ruginit, dar ar trebui să fie corect...

Cod: |_+_|

chown33

Moderator
Membru al personalului
9 august 2009
planul abisal
  • 25 ianuarie 2010
cx300 a spus: Java-ul meu este puțin ruginit, dar ar trebui să fie corect...

Cod: |_+_| Faceți clic pentru a extinde...

Când calculul este (greutate/(masă * masă)) fără alți coeficienți, unitățile de înălțime sunt metri și unitățile de masă (greutate) sunt kilograme. Dacă înălțimea poate lua doar metri întregi (1, 2, 3), aveți o problemă serioasă de precizie.

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

De asemenea, aceste tipuri nu vor produce niciodată nicio valoare fracțională în rezultat, deoarece calculul se efectuează în întregime în aritmetică întregi (adică diviziune trunchiată), apoi rezultatul întreg este convertit în dublu. Dacă se dorește un calcul dublu cu posibilitatea unei părți fracționale, cel puțin un operand trebuie să fie de tip double.

Nu cred că această problemă este unică pentru Java. Ai avea probleme similare în C, care are reguli similare pentru aritmetica întregi și duble.