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