从double到int的可能有损转换?

时间:2017-04-05 03:15:37

标签: java turtle-graphics

这是我尝试编译代码时收到的消息。究竟是什么意思,我该如何解决这个问题?

practice.java:13: error: incompatible types: possible lossy conversion from double to int
            pattern(t, length);
                       ^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error

这是我的代码:

public static void main(String[] args){
    Turtle t = new Turtle();
    t.delay(30);
    pattern2(t, 50.0, 3);

}

public static void pattern2(Turtle t, double length, int level){
    double random = Math.random();
    if (level == 0){
        pattern(t, length);
    } else{
        t.color(150/level, 150/level, 150/level);
        pattern2(t, length, level -1);
        t.penup();
        t.backward(length*4.5);
        t.left(60);
        t.forward(length);
        t.right(60);
        t.backward(length/random);
        t.pendown();
        pattern2(t, length/random, level-1);
    }
}

public static void pattern(Turtle t, int length){
    for (int i = 0; i < 5; i++) {
        triangle(t, length);
        t.forward(length); 
    } 
}

public static void triangle(Turtle t, int length){
    for (int i = 0; i < 3; i++) {
        t.forward(length);
        t.left(120);
    }
}

2 个答案:

答案 0 :(得分:3)

消息说当你在第13行调用pattern(t, length);时,你需要一个int长度时传递一个双倍的长度。如果您将模式和三角形方法更改为采用双倍长度而不是int长度,则会修复错误。

编辑以明确解释错误 您的方法采用的int只能保存最多2^32 - 1的值。双精度值最多可以保持〜1.7*10^308(请参阅Double类中的MAX_VALUE常量以获得更精确的限制)。这意味着double可能具有值(精度),如果将其用作int,则会丢失。

答案 1 :(得分:0)

pattern2()中的长度参数是double。但是,在pattern()中,length是int。 Java不会自动从double转换为int。