强制 Java 使用 double 而不是 int
Force Java to use double instead of 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));
}
}
最初,变量 sealY 是一个整数,如 sealX。但是,在下面的两个条件中,1 最终变得太小了,而 2 太大了。
该程序之前编译并运行良好。但是,一旦我将 sealY 更改为 double 并将在键盘输入上完成的操作更改为带小数(双精度)的数字,Java 就开始抛出错误 - 不兼容的类型:从 double 到 int[= 的可能有损转换13=]
我以前见过这种情况,有时我不必要地使用双精度数,而整数就足够了。然而,这里不是这种情况。一个整数是不够的。我发现这不是致命错误,更像是一个提示,但我的程序因此无法编译。
就个人而言,我认为编译器可以尝试提供帮助,但除此之外,我使用 double 还是 int 是 none 它的事。如果我坚持使用双精度数,应该有一种方法可以覆盖编译器,特别是因为我不能在这里尝试使用整数。
我认为转换不会解决这个问题。有没有办法手动覆盖编译器并声明我知道我在做什么并且我希望 sealY 是一个双精度?
编辑:
和一些文档:
设置位置
public void setLocation(int x, int y)
为这个演员分配一个新位置。这会将 actor 移动到指定位置。该位置被指定为世界上一个单元格的坐标。
如果此方法被覆盖,请务必从覆盖方法中将此方法调用为 "super.setLocation(x,y)",以避免无限递归。
参数:
x - x 轴上的位置索引
y - y 轴上的位置索引
也可以看看:
移动(整数)
转换也无法解决您的问题
你必须使用 :
sealY = getY().doubleValue();
if getY() returns 一个你应该使用的 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));
这看起来像是一个肮脏的把戏,但我不知道任何其他解决方案
我有以下代码:
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[= 的可能有损转换13=]
我以前见过这种情况,有时我不必要地使用双精度数,而整数就足够了。然而,这里不是这种情况。一个整数是不够的。我发现这不是致命错误,更像是一个提示,但我的程序因此无法编译。
就个人而言,我认为编译器可以尝试提供帮助,但除此之外,我使用 double 还是 int 是 none 它的事。如果我坚持使用双精度数,应该有一种方法可以覆盖编译器,特别是因为我不能在这里尝试使用整数。
我认为转换不会解决这个问题。有没有办法手动覆盖编译器并声明我知道我在做什么并且我希望 sealY 是一个双精度?
编辑:
和一些文档:
设置位置 public void setLocation(int x, int y) 为这个演员分配一个新位置。这会将 actor 移动到指定位置。该位置被指定为世界上一个单元格的坐标。 如果此方法被覆盖,请务必从覆盖方法中将此方法调用为 "super.setLocation(x,y)",以避免无限递归。 参数: x - x 轴上的位置索引 y - y 轴上的位置索引 也可以看看: 移动(整数)
转换也无法解决您的问题 你必须使用 :
sealY = getY().doubleValue();
if getY() returns 一个你应该使用的 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));
这看起来像是一个肮脏的把戏,但我不知道任何其他解决方案