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