磊哥工作十几年了,竟没有用过do-while!(文末送书)
最近在看 Java 的基礎(chǔ)知識(shí),其中有部分是關(guān)于循環(huán)的,在 Java 中,循環(huán)的語(yǔ)法總共分為 3 種:for、 while、 do-while,如下圖所示:
但我驚奇的發(fā)現(xiàn),在之前的職業(yè)生涯中(11 年),竟從未用過(guò) do-while(尷尬),于是問(wèn)了群里的小伙伴,發(fā)現(xiàn)也是鮮有人用。
do-while 語(yǔ)法分析
我們先來(lái)了解一下 do-while 的語(yǔ)法:
do?{//?statements }?while?(expression);注意:最后一個(gè)分號(hào)不能省略,否則會(huì)提示編譯出錯(cuò)。
它的執(zhí)行流程如下圖所示:
那它究竟在什么地方用呢?
do-while 使用場(chǎng)景
在我多次的搜索和請(qǐng)教下,終于找到了兩個(gè)相對(duì)滿意的使用場(chǎng)景,接下來(lái)一起來(lái)看。
使用場(chǎng)景一:搶票
對(duì)于搶票業(yè)務(wù)來(lái)說(shuō),無(wú)論三七二十一,先搶了再說(shuō),然后在判斷是否搶票成功,如果搶票成功則退出循環(huán),否則繼續(xù)執(zhí)行搶票,實(shí)現(xiàn)的偽代碼如下所示:
do?{//?搶票代碼... }?while?(沒(méi)搶到票);思路提供者:賈鯤
使用場(chǎng)景二:進(jìn)制轉(zhuǎn)換
經(jīng)過(guò)大量搜索發(fā)現(xiàn),在 JDK 的源碼中,也存在少量使用 do-while?的場(chǎng)景,比如 Integer 中進(jìn)制轉(zhuǎn)換,相關(guān)源碼如下:
static?int?formatUnsignedInt(int?val,?int?shift,?char[]?buf,?int?offset,?int?len)?{int?charPos?=?len;int?radix?=?1?<<?shift;int?mask?=?radix?-?1;do?{buf[offset?+?--charPos]?=?Integer.digits[val?&?mask];val?>>>=?shift;}?while?(val?!=?0?&&?charPos?>?0);return?charPos; }比如十進(jìn)制轉(zhuǎn)二進(jìn)制就會(huì)執(zhí)行此方法,在進(jìn)制轉(zhuǎn)換的業(yè)務(wù)中,無(wú)論任何情況,一定會(huì)至少執(zhí)行一次進(jìn)制轉(zhuǎn)換的,因此這種業(yè)務(wù)場(chǎng)景就非常適合 do-while。
總結(jié)
孔子說(shuō):溫故而知新。當(dāng)我們學(xué)完很多知識(shí)之后,回過(guò)頭來(lái)再琢磨這些知識(shí),發(fā)現(xiàn)很有趣,這就是知識(shí)的一大樂(lè)趣吧。本文我們介紹了兩種 do-while 的使用場(chǎng)景,搶票和進(jìn)制轉(zhuǎn)換,你還知道哪些 do-while 的使用場(chǎng)景嗎?歡迎評(píng)論區(qū)告訴我~
文末福利:送書
最后送兩本朋友新出的書,作者親筆簽名版哦,包郵到家!
第一本:《Web全棧項(xiàng)目開(kāi)發(fā)入門與實(shí)戰(zhàn)》
本書是手把手地教開(kāi)發(fā)者如何開(kāi)發(fā)一套全棧的 WEB 項(xiàng)目,項(xiàng)目的內(nèi)容是一個(gè)類似閑魚的二手交易平臺(tái),其中包含前端技術(shù)(主要使用 React 框架)和后端技術(shù)(主要使用Spring Boot 框架)。
第二本:《Spring Boot技術(shù)內(nèi)幕:架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理》
關(guān)注此公眾號(hào),發(fā)送“送書”參與抽獎(jiǎng)活動(dòng)哦~
往期推薦調(diào)研了100+開(kāi)源博客,發(fā)現(xiàn)這5個(gè)最好用!
多圖證明,Java到底是值傳遞還是引用傳遞?
阿里為什么推薦使用LongAdder,而不是volatile?
關(guān)注下方二維碼,收獲更多干貨!
總結(jié)
以上是生活随笔為你收集整理的磊哥工作十几年了,竟没有用过do-while!(文末送书)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 最简单的6种防止数据重复提交的方法!(干
- 下一篇: 第 6-6 课:消息队列面试题汇总