問(wèn)題:
FizzBuzzWhizz 需求:
when run(3) return 'Fizz'
when run(5) return 'Buzz'
when run(7) return 'Whizz'
when run(3 * 5) return 'FizzBuzz'? //run 的參數(shù)為 3和5共同的倍數(shù)
when run(3 * 7) return 'FizzWhizz'? //run 的參數(shù)為 3和7共同的倍數(shù)
when run(5 * 7) return 'BuzzWhizz'? //run 的參數(shù)為 5和7共同的倍數(shù)
when run(3 * 5 * 7) return 'FizzBuzzWhizz'? //run 的參數(shù)為 3、5和7共同的倍數(shù)
其余情況:
when run(n) return n? // n 可以為 非 3、5、 7或3、5、7的倍數(shù)的數(shù)字 如:run(2) return '2'
問(wèn)題的解決思路:
看到這個(gè)問(wèn)題的時(shí)候,首先來(lái)對(duì)他進(jìn)行問(wèn)題分析,然后規(guī)劃解決方案,再入手開(kāi)始寫(xiě)代碼,最后對(duì)其進(jìn)行測(cè)試。
1、我們來(lái)看問(wèn)題,很顯然這是一個(gè)簡(jiǎn)單的判斷問(wèn)題,另外就是分多個(gè)情況。
2、這個(gè)問(wèn)題的解決方法有很多 ,最簡(jiǎn)單的就是把他分7種不同的情況然后就if、else if、else if來(lái)寫(xiě),但是這樣很麻煩。于是我們就可以觀察問(wèn)題需求中當(dāng)為3的倍數(shù)時(shí)輸出F,5為B,7為W,而3與5為FB,3與7為FW,5與7為BW,3和5再加7為FBW。我們可以發(fā)現(xiàn)輸出的結(jié)果都是按F、B、W的順序輸出,而且字母間沒(méi)有間隙,我們就可以用三個(gè)if直接對(duì)一個(gè)數(shù)進(jìn)行判斷,只要有相關(guān)倍數(shù)就輸出相關(guān)字母。
3、然后就可以完成代碼,但其中要分不是3、5、7的倍數(shù)的時(shí)候直接輸出數(shù)字,而用else的話else只會(huì)與最后一個(gè)if形成對(duì)立,所以這個(gè)時(shí)候就可以引入一個(gè)p來(lái)糾正。于是就有了如下的代碼。
4、測(cè)試代碼的正確性,因?yàn)橛?種情況,那就引入7個(gè)數(shù)分別是
3、5、7、 15 ?、21、 ?35 ?、105 ?、2來(lái)測(cè)試。結(jié)果分別是:
F、B、W、FB、FW、BW、FBW、2
var test = function(num) {??
var p=1;
if(num%3 == 0){??
?p=0;document.write('Fizz');? }
if(num%5 == 0)? ? {p=0;document.write('Buzz'); }
if(num%7 == 0)? ? {p=0;document.write('Whizz'); }
if(p == 1)document.write(num);
document.write("<br>");}
test(3);test(5);test(7);test(15);test(21);test(35);test(105);test(2);
運(yùn)行結(jié)果:
