强制Java使用double而不是int

强制Java使用double而不是int,java,double,greenfoot,variable-types,Java,Double,Greenfoot,Variable Types,我有以下代码: public void keyboard() { int sealX; double sealY; if (Greenfoot.isKeyDown("up")) { sealX = getX(); sealY = getY(); setLocation(sealX, (sealY - 1.25)); } if (Greenfoot.isKeyDown("down")) { se

我有以下代码:

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));
    }
}
最初,变量sealY是一个整数,就像sealX一样。然而,在下面的两个条件中,1作为递增的结果太小,2太大

该程序以前编译并运行良好。但是,当我将sealY改为double并将键盘输入的操作改为带小数(double)的数字时,Java就开始抛出错误不兼容的类型:可能从double到int的有损转换

我以前见过这样的情况,有时我不必要地使用一个double,而一个整数就足够了。然而,这里的情况并非如此。整数是不够的。我发现这不是一个致命的错误,更像是一个提示,但我的程序不会因此编译

就我个人而言,我认为编译器可能会有所帮助,但除此之外,使用double或int都不关我的事。如果我坚持使用double,应该有一种方法覆盖编译器,特别是因为我不能在这里使用整数

我认为铸造不能解决这个问题。有没有一种方法可以手动重写编译器并声明我知道自己在做什么,我希望sealY是一个替身

编辑:

和一些文档:

定位 公共无效设置位置(整数x,整数y) 为此参与者分配一个新位置。这会将参与者移动到指定位置。该位置指定为世界中某个单元的坐标。 如果重写此方法,则从重写方法中将此方法称为“super.setLocation(x,y)”以避免无限递归非常重要。 参数: x-x轴上的位置索引 y-y轴上的位置索引 另见:
移动(int)

施法也不能解决你的问题 您必须使用:

sealY = getY().doubleValue();
如果getY()返回int,则应使用:

sealY = new Integer(getY()).doubleValue();
编辑:

您的setLocation函数看起来像setLocation(intx,inty)

因此,要避免此错误,您只能执行以下操作:

setLocation(sealX, new Double(y + 1.25).intValue());
或者像Radiodef说的那样

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

这看起来像是一个肮脏的把戏,但我不知道还有任何其他解决方案会给我错误“int不能被撤销引用”。现在我实际上有3个错误,而不是2个,尽管它在第一次运行时似乎很好getX()返回一个int或Integer?getX()返回一个Integer,因为这就是我使用它的方式,我假设没有问题。为了清楚起见,getX()必须是int,而getY()必须是double对不起,我正在编写一个解决方案,请稍候;)setLocation将2个双精度作为参数?ok int和double;)请发布
getX()
。我认为编译器可能会尽力提供帮助,但除此之外,无论我使用double还是int都不关它的事。编译代码是编译器唯一的事。哪一行给出了错误?或者,更好的是,你能在一个最小的自我包含的环境中复制你想要做的事情吗program@Joni有很多代码和多个类,所以不幸的是我不这么认为。错误都出现在带有setLocation语句的行上。听起来setLocation接受int参数,而不是double。Java不会自动将double转换为int,因为它有很多精度。听起来你想改变setLocation方法,这样它就可以接受double而不是ints。为什么你不认为casting可以解决这个问题呢?