2017-05-27 4 views
-1

Je le code suivant:Force de Java à utiliser double au lieu de int

public void keyboard() { 
    int sealX; 
    double sealY; 
    if (Greenfoot.isKeyDown("up")) { 
     sealX = getX(); 
     sealY = getY(); 
     setLocation(sealX, (sealY - 1.25)); 
    } 
    if (Greenfoot.isKeyDown("down")) { 
     sealX = getX(); 
     sealY = getY(); 
     setLocation(sealX, (sealY + 1.25)); 
    } 
} 

Dans un premier temps, la variable Sealy était un entier, comme sealX. Cependant, j'ai fini par être trop petit comme un incrémenté dans les deux conditions ci-dessous, et 2 était trop grand.

Le programme compilé et a bien fonctionné avant. Mais dès que j'ai changé sealY en un double et changé l'opération qui est faite sur le clavier d'entrée aux nombres avec des décimales (doubles), Java a commencé à lancer l'erreur - Types incompatibles: conversion possible avec perte de double en

Je l'ai déjà vu à des moments où j'utilisais un double inutilement et un nombre entier aurait suffi. Cependant, ce n'est pas le cas ici. Un nombre entier ne suffira pas. Je trouve que ce n'est pas une erreur fatale et est plus d'un conseil, mais mon programme ne compilera pas à cause de cela.

Personnellement, je pense que le compilateur peut essayer d'être utile, mais sinon ce n'est pas son affaire si j'utilise un double ou un int. Il devrait y avoir un moyen de contourner le compilateur si j'insiste sur l'utilisation d'un double, en particulier parce que je ne peux pas utiliser un entier pour ce que j'essaie de faire ici.

Je ne pense pas que le casting corrigera ce problème. Existe-t-il un moyen de remplacer manuellement les compilateurs et de déclarer que je sais ce que je fais et que je veux que sealY soit un double?

EDIT: enter image description here

Et certains documents:

setLocation de setLocation public void (int x, int y) Attribuer un nouvel emplacement pour cet acteur. Cela déplace l'acteur à l'emplacement spécifié. L'emplacement est spécifié comme les coordonnées d'une cellule dans le monde. Si cette méthode est surchargée, il est important d'appeler cette méthode "super.setLocation (x, y)" à partir de la méthode de remplacement, pour éviter une récursion infinie. Paramètres: x - indice d'emplacement sur l'axe x y - indice d'emplacement sur l'axe y Voir aussi: move (int)

+0

Veuillez écrire 'getX()'.* Je pense que le compilateur peut essayer d'être utile, mais sinon ce n'est pas son affaire si j'utilise un double ou un int. * Compiler le code ** est ** le seul métier des compilateurs. –

+0

Quelle ligne donne l'erreur? Ou, mieux encore, pouvez-vous reproduire ce que vous essayez de faire dans un programme autonome minimal – Joni

+0

@Joni Il y a beaucoup de code implique et plusieurs classes donc malheureusement je ne le pense pas. Les erreurs sont toutes deux sur les lignes avec l'instruction setLocation – InterLinked

Répondre

0

Avec ne résoudra pas votre problème aussi bien Vous devez utilisez:

sealY = getY().doubleValue(); 

si getY() retourne un entier, vous devez utiliser:

sealY = new Integer(getY()).doubleValue(); 

EDIT:Il semble que votre fonction setLocation ressemble à setLocation (int x, int y);

afin d'éviter cette erreur, vous ne pouvez faire:

setLocation(sealX, new Double(y + 1.25).intValue()); 

ou Radiodef dit

setLocation(sealX, (int) (y + 1.25)); 

Il ressemble à un truc sale, mais je ne sais pas toute autre solution

+0

Cela me donne l'erreur "int ne peut pas être déréférencé". Maintenant, j'ai en fait 3 erreurs au lieu de 2, bien que cela semble fonctionner au début – InterLinked

+0

getX() retourne un int ou Integer? –

+0

getX() renvoie un entier, puisque c'est ainsi que je l'utilise et je n'ai aucun problème, je suppose. Pour être clair, getX() doit être un int alors que getY() doit être un double – InterLinked