2014-12-13 25 views
0

我只是在學習重載方法的繩索。這裏有一個任務,我必須在不完整的CircleStats類中編寫重載的方法,但我不知道如何設置它們。我應該用它的直徑/半徑來找出一個圓的周長。如何設置超載方法來查找圓周?

據我所知,我不得不使用直徑找到周長的函數,然後使用半徑,但不知道從那裏去哪裏。我也知道半徑是雙倍的,半徑是int,但是我完全拋棄瞭如何填寫代碼到這裏。

如果有人能夠解釋如何在每種超載方法中設置數學運算來計算周長,這也將是非常好的。預先感謝!

編輯:在線路21和22,它應該是cStats.calcCircleCircumf,而不是cStats.calcCircleArea

/* The calcCircleCircumf() method in the CircleStatsTester class is overloaded. Write the overloaded methods in the incomplete CircleStats class.*/ 

class CircleStats 
{ 
    CircleStats() 
    { 
    }  
    //…code goes here  
} 

public class CircleStatsTester 
{ 
    public static void main(String[] args) 
    { 
     int diameter = 5; 
     double radius = 2.5; 
     CircleStats cStats = new CircleStats(); 

     System.out.println("The area = " + cStats.calcCircleArea(diameter)); 
     System.out.println("The area = " + cStats.calcCircleArea(radius));  
    } 
} 
+0

@ArnoldBrown你需要實現calcCircleCircumf()嗎? – user3437460 2014-12-13 08:29:46

+0

這是所有問題給我meand告訴我在不完整的CircleStats類中寫入重載的方法。 – 2014-12-13 08:30:43

+0

這很奇怪,通常他們需要至少提供方法簽名。 – user3437460 2014-12-13 08:31:50

回答

0

方法重載意味着你有相同方法的名稱,但不同的方法簽名

方法簽名包括

  • 方法名稱
  • 方法參數類型
  • 方法參數序列

過載的方法,簡單地創建相同方法名稱的另一方法不同簽名

實施例:

public int getArea(int x) 
{ 

} 

public double getArea(double x) //Signature is different, method overloading occurs 
{ 

} 

public int getArea(int x, int y) //Signature is different, method overloading occurs 
{ 

} 

注意,return type不影響方法簽名。


如果要實現方法重載,但提供不同的方法名稱,則這是不正確的。

+0

對,這就是我正在計劃使用的,但我怎樣才能把它應用到周圍?另外,你是否也可以閱讀數學部分? – 2014-12-13 08:39:36

+0

@ArnoldBrown你想再次超載的2種方法是什麼?必須至少有兩種方法讓超載發生。 – user3437460 2014-12-13 08:41:35

+0

這是我迄今爲止所做的,不知道它是否正確http://pastebin.com/CgFepjYf – 2014-12-13 08:45:52

0

這基本上是不可能的。

重載一個方法的過程包含兩個方法具有相同的名稱,但具有不同的簽名(即具有不同數量的參數和/或不同類型的參數)。

由於半徑,直徑有相同的類型,Java沒有辦法區分

calcCircleCircumf(double radius) 

calcCircleCircumf(double diameter) 

所以你需要兩個方法有不同的名稱:

computeCircumferenceFromRadius(double radius) 
computeCircumferenceFromDiameter(double diameter) 

,這不會超載了。

有關命名的注意事項:這些方法是名爲CircleStats的類的一部分。所以方法名中的puttin「Circle」是多餘的,只會增加噪音。儘管使用完整的單詞會使代碼更具可讀性,這就是Java中的慣例。因此computeCircumferenceFromRadius而不是calcCircleCircumf

+1

半徑是雙倍,直徑是int – 2014-12-13 08:40:56

+1

@ArnoldBrown那麼你可以重載,但這是可怕的設計。你爲什麼要用一個double來代替另一個int?什麼是半徑爲1.3的圓的直徑?是2嗎?是3嗎?不,它是2.6。而2.6是一個雙。即使假設這是有道理的,爲兩種完全不同的方法選擇相同的名字是非常糟糕的。讓你的代碼可讀。 – 2014-12-13 08:42:26

+0

我只需要使用半徑= 2.5和直徑= 5的給定值 – 2014-12-13 08:43:41

0

雖然這對我來說看起來很奇怪,但我認爲這就是你所問的。

public int calcCircleCircumf(int radius) 
{ 
    return (int)(2 * Math.PI * radius); 
} 

public double calcCircleCircumf(double diameter) //method overloading 
{ 
    return (2 * Math.PI * (diameter/2)); 
} 

我認爲這是你想要的。

+0

是的,這就像問題要我做的事情。有更好的方法來實現它嗎? – 2014-12-13 08:48:36

+0

沒有其他辦法,除非參數數據類型是相同的但不同數量的參數。 – user3437460 2014-12-13 08:49:58

+0

@Henry感謝提醒;) – user3437460 2014-12-13 08:52:47