Autre

Mac [Java] double ne peut pas être déréférencé

DaveTaylor

Affiche originale
6 novembre 2007
Aberdeenshire, Écosse
  • 25 janvier 2010
Code : |_+_|
Aider? MDR

iShater

13 août 2002


Chicagoland
  • 25 janvier 2010
Pouvez-vous poster l'erreur réelle? Pourquoi votre déclaration de retour est-elle avant la fin de votre méthode ? S

stanl8

24 déc. 2009
Manchester, Royaume-Uni
  • 25 janvier 2010
Tout d'abord, vous devriez essayer
retour ('' + IMC);
C'est-à-dire que l'opérateur '+' effectuera la concaténation.

Deuxièmement, je ne comprends pas quand ces instructions if s'exécuteront un jour car vous avez une instruction return ci-dessus qui s'exécutera toujours

DaveTaylor

Affiche originale
6 novembre 2007
Aberdeenshire, Écosse
  • 25 janvier 2010
iShater a dit : Pouvez-vous publier l'erreur réelle ? Pourquoi votre déclaration de retour est-elle avant la fin de votre méthode ? Cliquez pour agrandir...

L'erreur réelle est double ne peut pas être déréférencée.

cromulent

2 octobre 2006
Le pays de l'espoir et de la gloire
  • 25 janvier 2010
Tout d'abord, vous revenez avant d'atteindre vos instructions if.. else, ce qui signifie qu'elles ne seront jamais appelées.

Deuxièmement, votre méthode renvoie un double alors que vous essayez de renvoyer une chaîne dans vos instructions if.. else.

Troisièmement, lors de l'appel de la méthode toString(), vous devez utiliser l'objet Double plutôt que le type primitif. Vous devez donc déclarer l'IMC en tant que Double (java.lang.Double) plutôt que double.

Voici un exemple simple :

Code : |_+_|

chown33

Modérateur
Membre du staff
9 août 2009
le plan abyssal
  • 25 janvier 2010
DaveTaylor a déclaré : L'erreur réelle est double ne peut pas être déréférencée. Cliquez pour agrandir...

Tout d'abord, vous ne pouvez pas faire ceci :
Code : |_+_|
parce que l'IMC est déclaré comme double , le type primitif. Java n'effectue pas d'autoboxing dans cette situation, si je me souviens bien.

Si l'IMC était déclaré comme Double , la classe wrapper pour le type primitif, alors cela pourrait fonctionner...

Sauf que tu ne peux pas faire ça :
Code : |_+_|
car Java n'ajoute pas automatiquement les () pour vous. Si vous souhaitez invoquer la méthode toString sur un objet, vous devez l'écrire en tant qu'invocation de méthode :
Code : |_+_|
Si vous n'utilisez pas un tutoriel ou un livre, vous devriez vraiment l'être.

lee1210

10 janvier 2005
Dallas, Texas
  • 25 janvier 2010
Je voulais juste ajouter aux bonnes observations faites jusqu'à présent en suggérant l'utilisation de la méthode valueOf(double) de java.lang.String. Vous pouvez l'exécuter et récupérer une chaîne. L'utilisation de l'opérateur String + double fonctionne également, mais n'est pas nécessaire si tout ce que vous voulez, c'est la représentation String d'un double.

-Lire C

cx300

12 sept. 2008
Clermont, Floride
  • 25 janvier 2010
Mon java est un peu rouillé mais cela devrait être correct...

Code : |_+_|

chown33

Modérateur
Membre du staff
9 août 2009
le plan abyssal
  • 25 janvier 2010
cx300 a dit : Mon java est un peu rouillé mais cela devrait être correct...

Code : |_+_| Cliquez pour agrandir...

Lorsque le calcul est (poids/(masse * masse)) sans autres coefficients, les unités de hauteur sont des mètres et les unités de masse (poids) sont des kilogrammes. Si la hauteur ne peut prendre que des mètres entiers (1, 2, 3), vous avez un sérieux problème de précision.

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

De plus, ces types ne produiront jamais de valeur fractionnaire dans le résultat, car le calcul est effectué entièrement en arithmétique entière (c'est-à-dire en tronquant la division), puis le résultat entier est converti en double. Si vous voulez un calcul double avec possibilité de partie fractionnaire, au moins un opérande doit être de type double.

Je ne pense pas que ce problème soit propre à Java. Vous auriez des problèmes similaires en C, qui a des règles similaires pour l'arithmétique entière et double.