我做了很多研究,我确定这只是愚蠢的事情,所以我提前道歉。我正在尝试CodinGame挑战,并且我正在使用这批代码。
class Player {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
// game loop
while (true) {
int x = in.nextInt();
int y = in.nextInt();
int nextCheckpointX = in.nextInt(); // x position of the next check point
int nextCheckpointY = in.nextInt(); // y position of the next check point
int nextCheckpointDist = in.nextInt(); // distance to the next checkpoint
int nextCheckpointAngle = in.nextInt(); // angle between your pod orientation and the direction of the next checkpoint
int opponentX = in.nextInt();
int opponentY = in.nextInt();
int distX = Math.abs(x - nextCheckpointX);
int distY = Math.abs(y - nextCheckpointY);
int distance = Math.sqrt(distX * distX + distY * distY);
它进一步发展,但最后一行是我遇到问题的地方。我已经注释掉了我的其余代码,以确保这是发生错误的地方。
现在,我知道如果我取一个int的平方根,我可以获得一个double,但是如果我将变量设置为int,那么它应该只是存储为int ...对吗?我甚至试图将它存储为双人或漂浮物(我不想要这样)但它仍然给我这个错误。我做错了什么?
答案 0 :(得分:1)
Math.sqrt()
返回double
,因此您需要明确地将结果强制转换为(int)
,以告诉编译器您了解可能会丢失信息。毕竟,如果结果为2.125
,则您的2
变量中的int
结尾。编译器只是确保你理解它,而不是默默地删除小数部分。
因此,使用
添加显式强制转换int distance = (int) Math.sqrt(distX * distX + distY * distY);
请注意,将6.99
投射到int
不会将转换为7
,截断它到6
,这可能不是你想要的。有关舍入值的信息,请参阅Math.round()
。