2017-05-27 127 views
-1

我有以下代码:强制Java双,而不是使用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)); 
    } 
} 

最初,可变西利是一个整数,像sealX。然而,1最终以小于以下两个条件中的递增量计算,而2则过大。

该程序编译并正常工作之前。但是,只要我将sealY更改为double并将键盘输入上的操作更改为带有小数的数字(双精度),Java就开始抛出错误 - 不兼容的类型:可能有损于从double到int的有损转换

I'在有些情况下,我曾经看到过这种情况,因为我不必要地使用了double,并且整数就足够了。但是,这不是这种情况。一个整数是不够的。我发现这不是一个致命的错误,更多的是小费,但是我的程序因此无法编译。个人而言,我认为编译器可以尝试有帮助,但否则它不是它的业务,无论我使用双精度型还是整型。如果我坚持使用double,应该有一种方法来覆盖编译器,特别是因为我不能在这里使用一个整数作为我想要做的。

我不认为铸造将解决这个问题。有没有办法手动覆盖编译器,并声明我知道我在做什么,我想sealY是一个双?

编辑: enter image description here

和一些文档:

setLocation 公共无效setLocation(INT X,int y)对 分配一个新的位置这个演员。这将演员移动到指定的位置。该位置被指定为世界上一个细胞的坐标。 如果重写此方法,则必须将该方法从重写方法调用为“super.setLocation(x,y)”,以避免无限递归。 参数: X - 在x轴 y位置指数 - 在y轴 另请参见位置索引: 移动(INT)

+0

请发表'getX()'。*我认为编译器可以尝试提供帮助,但不管它是否使用double或int都不是它的业务。*编译代码**仅用于编译器业务。 –

+0

哪一行给出错误?或者,甚至更好,你能重现你在一个最小的自包含程序中要做的事情吗? – Joni

+0

@Joni有很多代码涉及和多个类,所以不幸我不这么认为。错误都在setLocation语句的行上 – InterLinked

回答

0

铸造不会解决你的问题,以及 你必须使用方法:

sealY = getY().doubleValue(); 

如果的getY()返回一个int,你应该使用:

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

编辑:

看来你的setLocation函数看起来像setLocation(int x,int y);

所以要避免这个错误,你只能做:

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

或Radiodef说

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

它看起来像一个肮脏的伎俩,但我不知道任何其他解决方案

+0

这给了我错误“int不能被解除引用”。现在我实际上有3个错误,而不是2个,虽然它似乎在第一次工作正常 – InterLinked

+0

getX()返回一个int或整数? –

+0

getX()返回一个整数,因为这是我如何使用它,我没有问题,我会假设。要明确,getX()需要是一个int,而getY()需要是一个双重的 – InterLinked

相关问题