2011-09-16 76 views
2

我需要創建一個應用程序充當BMI計算器,它收集許多屬性,具有匹配的屬性以獲取和設置這些屬性值並請求一些方法來計算具體的數據,如患者年齡,最大心率,目標率等。調用方法內部方法的正確方法

我的問題主要是關於方法的使用,並看看這種用法是正確還是不正確。

我的方法來計算年齡看起來如下:

public int Age() 
{ 
    DateTime Now = DateTime.Today; 
    return (Now.Year - DateOfBirth); 
} 

我什麼不是100%肯定的是,如果我現在可以使用另一種方法的計算該方法,如以下幾點:

public int MaxHeartRate() 
{ 
    return (220 - Age()); 
} 

我本來可以使用一個屬性來做到這一點,但是,該任務要求使用方法來執行計算。

任何援助將不勝感激。我理解這兩種方法和屬性之間的用法,但我只是不清楚在方法內調用另一個方法用於計算目的。

+1

「我本來可以使用一個屬性來完成這個任務,但是這個任務需要使用方法來執行計算。」啊,瘋狂的作業規範......我有些東西禁止使用泛型集合,僅僅因爲我的學校不認爲任何人會知道如何使用它們。 – BoltClock

+2

我不希望成爲負面的或任何東西,但是爲了測試上述內容而不是實際制定問題的速度要快得多(哪個順便說一句很好)。 –

+1

哈哈,我真的這樣做,它工作得很好,但是如你所知,有很多方法可以完成工作,並且在某些情況下,僅僅因爲它的工作並不意味着它應該以這種方式使用,所以我來在這裏要求澄清這個問題;)謝謝! – sfla99

回答

8

是的,這很好。

但是,您可能在這裏有一個BUG:

public int Age() { 
    DateTime Now = DateTime.Today; 
    return (Now.Year - DateOfBirth); 
} 

目前還不清楚是什麼DateOfBirth是的,但如果它代表的出生年份,因爲它似乎是,如果我生於12月31日發生的事情, 2011和DateTime.Now是2012年1月1日12:00:00.000 AM?

此外,評論的一點,你會經常看到有人寫你的方法

public int MaxHeartRate() { 
    return (220 - this.Age()); 
} 

使得它清楚地表明,我們調用的實例方法Age。可讀性是編寫優質代碼最重要的特性之一。

+0

簡潔。我喜歡。 – DanTheMan

+2

謝謝大家的瘋狂快速反應!它真正的讚賞。上面的工作非常好,我只是真的需要一些方法中的方法的使用的清晰,並且你們都讓我直觀。再次,非常感謝! – sfla99

+0

我應該指出DateOfBirth是從程序傳入的一個屬性,並且被設置爲int類型,簡稱EG:1986,爲此目的,我只需要使用(Now.Year - DateOfBirth),最後不幸的是我不是允許這個。年齡(),但在課堂上。 – sfla99

1

直接的答案是肯定的,你可以。

-1

編輯:我的壞!這是一個漫長的一週!正如下面在註釋中提到的那樣,如果它需要一個參數,你只能將它看作靜態的。

您在這裏遇到的問題是Age()函數不是靜態的,因此您需要創建和實例,對於該類型的方法而言不是您想要的。

如果定義年齡()爲:

public static int Age() { } 

然後,像你在MaxHearRate()方法

+0

你怎麼知道把它作爲實例方法不是他想要的? – BoltClock

+0

@dougajmcdonald:作爲一個**無參數**方法聲明的'Age'顯然需要是一個實例方法,否則它無法獲取它需要計算年齡的數據。 – jason

+0

我不是你說得對,像上面一樣,我一直是香腸 – dougajmcdonald

1

是的,你的用法是正確的有,你可以使用它。實際上這很標準,因爲你只能從其他方法中調用方法。我會仔細檢查上唯一的一點是:

return (Now.Year - DateOfBirth); 

我不知道這是否會返回一個int或不是由於出生日期是一個日期時間。你可能只想檢查一下。

0

是的,您可以(也應該)在您使用該計算值計算其他位置的地方使用Age方法。

雖然你的計算年齡的邏輯是不正確的。 DateTime.Today返回DateTime對象,表示(截止撰寫本文)2011年9月16日12:00:00 AM。 DateTime.Today.Year因此會返回2011.如果我出生於1984年2月,並且假設DateOfBirth是我出生的那一年,那麼當您在2011年運行它時,此方法將始終返回27,直到您在2012年1月1日點擊它時開始返回28.

不要只比較幾年 - 比較實際日期,然後將它們的TimeSpan之間的差異部分拉出來。

+0

DateTime = Now的用法,是允許我在計算中使用Now.Year,我想它是一個額外的步驟,我可以有錐體日期/月/年,但爲了這個練習的目的,它只需要一個小的計算來獲得最大心率,問題最初是這個例子現在從用戶那裏得到當年的輸入,所以我有使用DateTime來基於他們的年齡。 – sfla99

+0

''(DateTime.Now - DateOfBirth).Year''會返回你想要的數據並且在數學上是精確的,只要'DateOfBirth''是一個'DateTime''。 – BishopRook

0

是的,你在做什麼很好,假設DateOfBirth返回你想要的。您定義的函數將始終返回int,因爲那是您已定義的返回類型。這意味着您可以在任何需要整數的地方使用函數Age()

一對夫婦的指針,以幫助你開始:

  • 你提到這個,所以我覺得你得到它,但一般來說這可能是一個變量存儲的候選。每次調用Age()函數時,都會執行計算。有時候這就是你想要的。這是合理的,因爲你的年齡可能會改變,但這只是一年一次。你可以想象一個非常複雜的方法,它會做很多繁重的工作。你會想將該函數的輸出緩存在一個變量中。
  • 您已經定義了一個變量Now,它只是獲得DateTime.Today。然後你用它來找到一年。您只需將DateTime.Today.Year而不是創建新變量即可保存。小點。