文章轉(zhuǎn)載自公眾號(hào):Java中文社群
最近在看 Java 的基礎(chǔ)知識(shí),其中有部分是關(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è)分號(hào)不能省略,否則會(huì)提示編譯出錯(cuò)。
它的執(zhí)行流程如下圖所示:
那它究竟在什么地方用呢?
do-while 使用場(chǎng)景
在我多次的搜索和請(qǐng)教下,終于找到了兩個(gè)相對(duì)滿意的使用場(chǎng)景,接下來一起來看。
使用場(chǎng)景一:搶票
對(duì)于搶票業(yè)務(wù)來說,無論三七二十一,先搶了再說,然后在判斷是否搶票成功,如果搶票成功則退出循環(huán),否則繼續(xù)執(zhí)行搶票,實(shí)現(xiàn)的偽代碼如下所示:
do {
// 搶票代碼...
} while (沒搶到票);
思路提供者:賈鯤
使用場(chǎng)景二:進(jìn)制轉(zhuǎn)換
經(jīng)過大量搜索發(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ù)中,無論任何情況,一定會(huì)至少執(zhí)行一次進(jìn)制轉(zhuǎn)換的,因此這種業(yè)務(wù)場(chǎng)景就非常適合 do-while
。
總結(jié)
孔子說:溫故而知新。當(dāng)我們學(xué)完很多知識(shí)之后,回過頭來再琢磨這些知識(shí),發(fā)現(xiàn)很有趣,這就是知識(shí)的一大樂趣吧。本文我們介紹了兩種 do-while
的使用場(chǎng)景,搶票和進(jìn)制轉(zhuǎn)換,你還知道哪些 do-while
的使用場(chǎng)景嗎?
以上就是W3Cschool編程獅
關(guān)于do-while,Java中容易被忽略的語句的相關(guān)介紹了,希望對(duì)大家有所幫助。