得到错误:从double到int的可能有损转换....但我没有使用任何双打?

时间:2017-02-21 19:06:58

标签: java

我做了很多研究,我确定这只是愚蠢的事情,所以我提前道歉。我正在尝试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 ...对吗?我甚至试图将它存储为双人或漂浮物(我不想要这样)但它仍然给我这个错误。我做错了什么?

1 个答案:

答案 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()