强制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可以解决这个问题呢?