8 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
三的倍數(shù)和五的倍數(shù)實(shí)際上就是15的整數(shù)倍。
代碼就可以簡(jiǎn)化成

var j = (i % 15) == 0 ? "FizzBuzz\n" : (i % 3) == 0 ? "Fizz\n" : (i % 5) == 0 ? "Buzz\n" : i.ToString();
stringbulider 這個(gè)想用就用,不想用算了。
三目運(yùn)算系統(tǒng)會(huì)進(jìn)行優(yōu)化。
這樣的代碼運(yùn)行怎么 都會(huì)很快。
要知道,執(zhí)行慢不會(huì)因?yàn)閱我环椒ɑ蛘哒Z(yǔ)句執(zhí)行的慢。而是因?yàn)檎w的結(jié)構(gòu)設(shè)計(jì)的不好。
就算是你用10000次反射在這里,速度都還是很快的。
別太糾結(jié)到一個(gè)個(gè)方法這樣的優(yōu)化。

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
簡(jiǎn)潔的寫法倒是有,更高效的估計(jì)不多,你這種寫法已經(jīng)挺高效了,另外把string換為stringbuilder貌似會(huì)更好點(diǎn)

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用stringbuilder,
?msg += i + "\n";寫成 ?msg += i。tostring() + "\n";

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
public void DoPrintDemo() { string msg = ""; for (int i = 1; i <= 100; i++) { bool normal = true; if (i % 3 == 0) { normal = false; msg += "Fizz"; } if (i % 5 == 0) { normal = false; msg += "Buzz"; } if(normal) { msg += i.ToString(); } msg += "\n";
} this.divTest.InnerHtml = msg; }
沒(méi)有絕對(duì)的優(yōu)化方案,你這個(gè)代碼看起來(lái)似乎很啰嗦,其實(shí)在計(jì)算機(jī)里的運(yùn)行性能已經(jīng)很好了。我給出的代碼相對(duì)你的代碼不一定比你的代碼好,只是作為引玉之磚,希望能對(duì)你有所幫助。
此外,如果你一定想更進(jìn)一步的優(yōu)化,那么使用二進(jìn)制進(jìn)行比較判斷也是一個(gè)方案,只是,3或5的倍數(shù)在二進(jìn)制里并不具備優(yōu)勢(shì),這樣或許適得其反。
另外,artwl已經(jīng)說(shuō)了,把String使用StringBuilder替代,性能會(huì)高很多,但這個(gè)跟算法已經(jīng)沒(méi)關(guān)系了,只是你對(duì)String和StringBuilder兩個(gè)類型的掌握問(wèn)題。

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
謝謝朋友的熱情回答!不過(guò),朋友你寫的這個(gè)方法貌似沒(méi)有實(shí)現(xiàn)這個(gè)“既是 3 的倍數(shù)又是 5 的倍數(shù)打印‘FizzBuzz’”功能的判斷呢。

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
@Technology:?那是你沒(méi)看懂??炊司筒粫?huì)這樣說(shuō)了。你可以試運(yùn)行看看是否有。
- 8 回答
- 0 關(guān)注
- 590 瀏覽
添加回答
舉報(bào)