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