2010-05-20 7 views
0

J'ai eu un problème ennuyeux, obtenant un "perte de précision possible" erreur lors de la compilation de mon programme Java sur BlueJ (Mais d'après ce que je lis ce n'est pas connecté à un IDE spécifique).Avertissement vs erreur

J'ai été surpris par le fait que le compilateur m'a dit qu'il y avait une perte de précision possible et ne me laisserait pas compiler/exécuter le programme. Pourquoi est-ce une erreur et non un avertissement disant que vous pourriez perdre la précision ici, si vous ne voulez pas que cela change votre code?

Le programme s'exécute très bien lorsque je supprime les valeurs flottantes; cela n'aurait pas d'importance puisqu'il n'y a pas de point (par exemple [143.08, 475.015]) sur mon écran. D'autre part quand je boucle une ArrayList et dans cette boucle j'ai une clause if retirant des éléments de la ArrayList elle fonctionne bien, juste jette une erreur et n'affiche pas la ArrayList [utilisée pour dessiner des cercles] pour une fraction de seconde. Cela me semble être une erreur grave, mais ne cause pas (presque) de problèmes, alors que je ne voudrais pas avoir une telle chose dans mon code.

Quelle est la limite?

+4

Il est assez difficile à dire sans voir le code réel ... –

+0

J'ai toujours trouvé l'avertissement "Perte de précision possible" plutôt ironique ... – skaffman

+0

@ Jon Skeet: Ma question n'est pas de savoir comment résoudre mon problème. problème spécifique, je l'ai déjà fait, plutôt pourquoi "perte de précision possible" arrête le compilateur au lieu d'afficher un message d'erreur par exemple – Samuel

Répondre

2

C'est une erreur car la spécification ne permet pas de réduire les conversions de primitives dans un Assignment Conversion.

Si vous souhaitez vraiment affecter un type de données plus grand à un type de données plus petit, tel que double à float, vous devez explicitement le convertir.

+1

Oui, bon, c'est pourquoi c'est une erreur dans le compilateur - parce que le compilateur implémente le langage et la langue dit que c'est illégal. Je suppose que le bug est dans le message d'erreur: "conversion de rétrécissement illégal dans l'affectation" est plus précis mais peut-être tout aussi insondable ... –

0

Cela pourrait conduire à des erreurs de calcul très difficiles à détecter. Donc c'est vrai que c'est une erreur - vous ne voulez pas qu'un programme vous donne un résultat avec une erreur inconnue dans le résultat.