2017-04-05 57 views
1

這是我在嘗試編譯我的代碼時得到的消息。這究竟意味着什麼,我該如何解決這個問題?從double到int可能有損轉換?

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); 
    } 
} 

回答

3

,當你調用pattern(t, length);在第13行你傳遞一個雙長度時,它需要int長度有消息稱。如果將模式和三角形方法更改爲採用double長度而不是int長度,它將修復錯誤。

編輯明確解釋錯誤 你的方法採取一個int這隻能承載值高達2^32 - 1。雙打可以保持高達〜1.7*10^308的值(請參閱Double類中的MAX_VALUE常量以獲得更確切的限制)。這意味着double可能具有值(精度),如果它被用作int,則會丟失。

0

double的最大值比int的最大值大很多。一個大於最大int值的double值在被鎖定爲int時被截斷。這就是有損轉換裝置,保存爲一個int可以最終不找像原來的值,如果有沒有空間,所有的轉換價值的價值。

編譯器根本看不到你程序的流程,它不像它檢查你傳入一個值的唯一地方是字面值50.0,然後說:「哦,那就好了。」所有的編譯器都在看類型。

在這種情況下,最簡單的解決方案是使用int文本而不是double。三角形方法需要一個int,所以給它一個。

如果你是在你有一個雙值傳遞給期待一個int的方法的情況下,你可以添加一個投來告訴編譯器不抱怨。在模式2()

0

你的長度參數是兩倍。但是,在模式()中,長度是int。 Java不會自動從double轉換爲int。

相關問題