我有以下代码:
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成为双倍?
以及一些文档:
setLocation public void setLocation(int x,int y) 为此actor分配新位置。这会将actor移动到指定位置。该位置被指定为世界中单元格的坐标。 如果重写此方法,则必须从重写方法将此方法称为“super.setLocation(x,y)”,以避免无限递归。 参数: x - x轴上的位置索引 y - y轴上的位置索引 也可以看看: 移动(INT)
答案 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));
这看起来像一个肮脏的伎俩,但我不知道任何其他解决方案