2015-05-01 26 views
4

我正在學習Java,我正在通過Deitel & Deitel的書「Java:How To Program」。在學習的同時,我正試圖在後面進行練習。我正在進行的具體練習是:創建一個類然後測試該類

創建一個具有屬性長度和寬度的矩形,每個矩形默認爲1.提供計算矩形周長和麪積的方法。使用set和獲取長度和寬度的方法。設置的方法將驗證長度和寬度均爲大於0.0且小於20.0的浮點數。編寫一個程序來測試類Rectangle。

這裏是我已創建的類:

package rectangle; 

public class Rectangle { 

    public float rectangle; 
    public float length; 
    public float width; 
    public float perimeter; 
    public float area; 

    public Rectangle(float length, float width){ 

     if(length < 0.0 || length >= 20.0){ 
      throw new IllegalArgumentException("Length must be between 0.0 and 20.0"); 
     } 
     if(width < 0.0 || width >= 20.0){ 
      throw new IllegalArgumentException("Width must be between 0.0 abnd 20.00"); 
     } 

     this.length = length; 
     this.width = width; 
    } 


    public float getLength(){ 
     return length; 
    } 

    public float getWidth(){ 
     return width; 
    } 

    public void setPerimeter(float perimeter){ 
     perimeter = ((getLength() *2) + (getWidth()*2)); 
    } 

    public float getPerimeter(){ 
     return perimeter; 
    } 

    public void setArea(float area){ 
     area = getLength() * getWidth(); 
    } 

    public float area(){ 
     return area; 
    } 

} 

下面是測試類或驅動器類:

package rectangle; 

public class TestRectangle { 

     public static void main(String[] args){ 
       Rectangle rectangle1 = new Rectangle (3.2, 3.3); 

       System.out.printf("The perimeter of rectangle1 is: %d%n", rectangle1.getPerimeter());  

     } 

} 

正如我運行測試類(在IDE),該警報顯示:

「不兼容的類型:可能有損耗地從雙倍轉換爲浮點型」。

我不明白爲什麼IDE會提出這個警告。誰能幫忙?

+0

Java中的浮點文字是'double'類型,但是''Rectangle''構造函數需要'float'。只需將構造函數中的參數數據類型更改爲「double」,以便稍後消除可能的錯誤。 – jdphenix

+1

公共實例變量的訪問器會怎樣?讓那些私人!什麼是「公共浮動矩形」? –

回答

4

在Java中,文字值1.0或任何其他正常的十進制值被認爲是雙(64位浮點值)。您的構造函數將浮點數(32位浮點值)作爲輸入。您正嘗試將64位數字傳遞給需要32位數字的函數。 Java永遠不會讓你做任何可能會失去精度的事情(比如將float傳遞給int方法或將double傳遞給float方法)。解決這個問題的最好的辦法是說

Rectangle rectangle1 = new Rectangle (3.2f, 3.3f); 

添加的F通知Java字面是一個32位浮點,而不是64位雙。您還可以添加演員表:

Rectangle rectangle1 = new Rectangle ((float) 3.2, (float) 3.3); 

但使用f表示法是非常可取的。

1

您正在用此行實例化雙打。

Rectangle rectangle1 = new Rectangle (3.2, 3.3); 

爲了使花車,你需要這樣做:

Rectangle rectangle1 = new Rectangle (3.2f, 3.3f); 
相關問題