W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
我在本章闡述了一種程序開發(fā)的方法,我稱之為快速建原型及迭代完善。先編寫一個能執(zhí)行基本運算的草案(或原型),然后用幾個案例進行測試,發(fā)現(xiàn)缺陷并修正之。
盡管此方法很有效,但也會使代碼變得沒有必要的復雜--因為要處理許多特殊情況,而且不可靠--因為你很難知道是否發(fā)現(xiàn)了所有的錯誤。
一種備案是高屋建瓴,對問題看得深入一點可使變成更加容易。對此案例的深入看法是:一個Time對象其實就是一個基為60的3位數(shù)!秒是個位,分鐘是“60位”,小時是“3600位”。
當我們編寫addTime和increment兩個函數(shù),我們實際上是在做以60為基數(shù)的加法,所以我們需要進位。
還有一種解決整個問題的備案,即把Time類型轉(zhuǎn)換為double類型,它利用了這樣一個事實:計算機已經(jīng)能夠做double型的算術(shù)。下面是一個將Time轉(zhuǎn)換為double的函數(shù):
double convertToSeconds (const Time& t) {
int minutes = t.hour * 60 + t.minute;
double seconds = minutes * 60 + t.second;
return seconds;
}
現(xiàn)在我們需要的只是把double轉(zhuǎn)換為Time的方法了:
Time makeTime (double secs) {
Time time;
time.hour = int (secs / 3600.0);
secs -= time.hour * 3600.0;
time.minute = int (secs / 60.0);
secs -= time.minute * 60;
time.second = secs;
return time;
}
你可能需要想一想,才能相信我所使用的不同基數(shù)之間的轉(zhuǎn)換技術(shù)是正確的。假設你已經(jīng)想通了,我們就可以用這些函數(shù)來重寫addTime:
Time addTime (const Time& t1, const Time& t2) {
double seconds = convertToSeconds (t1) + convertToSeconds (t2);
return makeTime (seconds);
}
比之前的版本精簡了不少,證明其正確性也更加容易(按常規(guī)要假設其調(diào)用的函數(shù)是正確的)。給大家一個練習:用同樣方法重寫increment。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: