我一直在四处寻找,但我根本无法找到一个很好的解决方案......
Point mouse = MouseInfo.getPointerInfo().getLocation();
int dx = (BULLET_SPEED*Math.abs(x - mouse.getX()))/
(Math.abs(y - mouse.getY()) + Math.abs(x - mouse.getX()))*
(x - mouse.getX())/Math.abs(x - mouse.getX());
在这个星座中我得到:可能会丢失精度,当我将例如(x - mouse.getX())
更改为(x - mouse.getX()).doubleValue()
时,它表示double无法解除引用,当我在某处添加intValue()时,它表示int无法解除引用。我的错是什么?
[x,y是整数| BULLET_SPEED是static final int
]
谢谢!
答案 0 :(得分:3)
我将x
,y
和BULLET_SPEED
存储为double,在double中执行所有算术,然后转换为int作为最后一步。
答案 1 :(得分:1)
使用(int)
int i = (int) 3.14159; // compiles fine
这不会避免任何精度损失,但它使编译器明白它是你想要的,所以代码会编译。
请记住铸造位于优先位置。
int i = (int) .1D + .1D; // doesn't compile!!!
int j = (int) (.1D + .1D); // compiles fine
原语不是对象;他们没有会员。
Integer ii = 42; // autoboxing
int i = ii.intValue(); // compiles fine
int j = i.intValue(); // doesn't compile
因此,在这种特定情况下,您可以执行以下操作:
int dx = (int) (BULLET_SPEED*Math.abs(x - mouse.getX()))/
(Math.abs(y - mouse.getY()) + Math.abs(x - mouse.getX()))*
(x - mouse.getX())/Math.abs(x - mouse.getX());