Altro

Mac [Java] double non può essere dereferenziato

D

DaveTaylor

Manifesto originale
6 novembre 2007
Aberdeenshire, Scozia
  • 25 gennaio 2010
Codice: |_+_|
Aiuto? LOL

iShater

13 agosto 2002


Chicagoland
  • 25 gennaio 2010
Puoi postare l'errore effettivo? Perché la tua dichiarazione di restituzione è prima della fine del tuo metodo? S

stanl8

24 dicembre 2009
Manchester, Regno Unito
  • 25 gennaio 2010
Prima di tutto dovresti provare
ritorno ('' + BMI);
Cioè, l'operatore '+' eseguirà la concatenazione.

In secondo luogo, non capisco quando quelle istruzioni if ​​verranno mai eseguite perché hai un'istruzione return sopra che verrà sempre eseguita D

DaveTaylor

Manifesto originale
6 novembre 2007
Aberdeenshire, Scozia
  • 25 gennaio 2010
iShater ha detto: puoi postare l'errore effettivo? Perché la tua dichiarazione di restituzione è prima della fine del tuo metodo? Clicca per espandere...

L'errore effettivo è doppio non può essere dereferenziato.

Cromulent

2 ottobre 2006
La Terra della Speranza e della Gloria
  • 25 gennaio 2010
Prima di tutto torni prima di colpire le tue istruzioni if.. else, il che significa che non verranno mai chiamate.

In secondo luogo il tuo metodo restituisce un double ma stai cercando di restituire una stringa nelle tue istruzioni if.. else.

In terzo luogo, quando si chiama il metodo toString() è necessario utilizzare l'oggetto Double anziché il tipo primitivo. Quindi dovresti dichiarare l'IMC come Double (java.lang.Double) anziché double.

Qui c'è un semplice esempio:

Codice: |_+_|

chown33

Moderatore
Membro dello staff
9 agosto 2009
il Piano Abissale
  • 25 gennaio 2010
DaveTaylor ha dichiarato: L'errore effettivo è doppio non può essere dereferenziato. Clicca per espandere...

Innanzitutto, non puoi fare questo:
Codice: |_+_|
perché BMI è dichiarato come Doppio , il tipo primitivo. Java non esegue l'autoboxing in questa situazione, se ricordo bene.

Se il BMI fosse dichiarato come Doppio , la classe wrapper per il tipo primitivo, allora potrebbe funzionare...

Tranne che non puoi fare questo:
Codice: |_+_|
perché Java non aggiunge automaticamente () per te. Se vuoi invocare il metodo toString su un oggetto, devi scriverlo come invocazione del metodo:
Codice: |_+_|
Se non stai usando un tutorial o un libro, dovresti davvero esserlo.

lee1210

10 gennaio 2005
Dallas, TX
  • 25 gennaio 2010
Volevo solo aggiungere alle buone osservazioni fatte finora suggerendo l'uso del metodo valueOf(double) di java.lang.String. Puoi eseguirlo e recuperare una stringa. Anche l'uso dell'operatore String + double funziona bene, ma non è necessario se si desidera solo la rappresentazione String di un double.

-Leggi C

cx300

12 settembre 2008
Clermont, Florida
  • 25 gennaio 2010
Il mio Java è un po' arrugginito, ma dovrebbe essere giusto...

Codice: |_+_|

chown33

Moderatore
Membro dello staff
9 agosto 2009
il Piano Abissale
  • 25 gennaio 2010
cx300 ha detto: Il mio Java è un po' arrugginito ma dovrebbe essere giusto...

Codice: |_+_| Clicca per espandere...

Quando il calcolo è (peso/(massa * massa)) senza altri coefficienti, le unità di altezza sono metri e le unità di massa (peso) sono chilogrammi. Se l'altezza può assumere solo metri interi (1, 2, 3), hai un serio problema di precisione.

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

Inoltre, questi tipi non produrranno mai alcun valore frazionario nel risultato, poiché il calcolo viene eseguito interamente in aritmetica intera (ovvero troncando la divisione), quindi il risultato intero viene convertito in doppio. Se si vuole un calcolo doppio con possibilità di parte frazionaria, almeno un operando deve essere di tipo double.

Non credo che questo problema sia esclusivo di Java. Avresti problemi simili in C, che ha regole simili per l'aritmetica intera e doppia.