强制Java使用double而不是int

时间:2017-05-27 23:09:49

标签: 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")) {
        sealX = getX();
        sealY = getY();
        setLocation(sealX, (sealY + 1.25));
    }
}

最初,变量sealY是一个整数,就像sealX一样。然而,1最终变得太小而在下面的两个条件中递增,而2太大了。

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

我之前看到过这种情况,有时候我不必要地使用了一个整数,而且整数就足够了。但是,这不是这种情况。整数是不够的。我发现这不是一个致命的错误,更多的是一个提示,但我的程序不会因此而编译。

就个人而言,我认为编译器可以尝试提供帮助,但无论我使用double还是int,它都不是它的业务。如果我坚持使用double,应该有一种覆盖编译器的方法,特别是因为我不能在这里尝试使用整数。

我不认为演员会解决这个问题。有没有办法手动覆盖编译器并声明我知道我在做什么,我希望sealY成为双倍?

编辑: enter image description here

以及一些文档:

setLocation public void setLocation(int x,int y) 为此actor分配新位置。这会将actor移动到指定位置。该位置被指定为世界中单元格的坐标。 如果重写此方法,则必须从重写方法将此方法称为“super.setLocation(x,y)”,以避免无限递归。 参数: x - x轴上的位置索引 y - y轴上的位置索引 也可以看看: 移动(INT)

1 个答案:

答案 0 :(得分: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));

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