2017-07-05 56 views
0

我有這些類:無法顯示正確的值

interface Shape 
{ 
    public double getPerimeter(); 
    public double getArea(); 
    public void getDetails(); 
} 

class Circle implements Shape 
{ 
    private double PI = 3.14; 
    private int radius; 
    double perimeter, area; 

    //constructor 
    public Circle(int radius) 
    { 
     perimeter = 2.0 * (PI * radius); 
     area = PI * (radius * radius); 
    } 

    public int getRadius() 
    { 
     return radius; 
    } 

    public double getPerimeter() 
    { 
     return perimeter; 
    } 

    public double getArea() 
    { 
     return area; 
    } 

    public void getDetails() 
    { 
     System.out.println("Shape Type: Circle " + "\n" 
         + "Radius: " + getRadius() + "\n"       
         + "Perimeter: " + getPerimeter() + "\n"  
         + "Area: " + getArea() + "\n"  ); 
    } 
} 

最後

public class TestShape 
{ 
    public static void main(String args[]) 
    { 

     for(int i = 0; i < args.length; i++) 
     { 
      try 
      { 
       Integer.parseInt(args[i]); 
      } 

      catch(NumberFormatException nfe) 
      { 
       System.err.print("wrong"); 
      } 

      catch(IllegalArgumentException iae) 
      { 
       System.err.print("wrong"); 
      } 

      if(args.length==1) 
      { 
       i = Integer.parseInt(args[0]); 
       Circle r1 = new Circle(i); 
       r1.getDetails(); 
      } 
     } 

    } 

} 

我們被分配到輸入1,2或3個數字在終端的命令行上,輸出將根據數組大小顯示它的形狀。當我輸入一個數字時,我設法得到了正確的參數和區域,但半徑始終顯示0而不是輸入的實際數字。

​​

所以,你們覺得呢?

+2

這是Java嗎?它看起來像Java。請記住下次使用正確的語言標籤。也請儘量避免褻瀆。並且不要發佈(鏈接到)包含文本的圖像。相反,將文本*作爲*文本*複製粘貼到問題主體中。 *您的問題是什麼?*您使用您的代碼顯示的問題是什麼?請花一些時間[採取SO旅遊](http://stackoverflow.com/tour)和[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。 –

+1

整潔的錯誤處理消息... – Lemonov

+0

這是一個簡單的缺失行,我已經投票關閉作爲一個錯誤,沒有必要在SO的未來。 – AxelH

回答

2

你是不是在分配圈的構造半徑...

public Circle(int radius) 
{ 
    perimeter = 2.0 * (PI * radius); 
    area = PI * (radius * radius); 
    this.radius = radius // this statement is missing 
} 

因此,circle.getRadius()總是返回未初始化的默認int值0

0

在你的構造:

public Circle(int radius) 
{ 
    perimeter = 2.0 * (PI * radius); 
    area = PI * (radius * radius); 
} 

radius指參數radius,而不是在Circle宣佈radius領域。您需要通過將radius參數分配給radius字段來使它們相同。要參考radius字段,請使用this.radius

this.radius = radius; 

因爲你沒有在你的代碼做到這一點,通過getRadius返回radius是0,這是未分配int的默認值。

0

如果未初始化,則實例變量默認分配值。在int的情況下它默認爲0。因此,要將值分配給您的實例變量半徑,您需要在構造函數中添加此行。

this.radius =半徑

我們因爲你的實例變量和局部變量都具有相同的名稱使用這個