App下載

do-while,Java中容易被忽略的語句

猿友 2020-09-07 14:02:43 瀏覽數(shù) (2450)
反饋

文章轉(zhuǎn)載自公眾號:Java中文社群

最近在看 Java 的基礎(chǔ)知識,其中有部分是關(guān)于循環(huán)的,在 Java 中,循環(huán)的語法總共分為 3 種:forwhile、 do-while,如下圖所示:

do-while,Java中容易被忽略的語句

但我驚奇的發(fā)現(xiàn),在之前的職業(yè)生涯中(11 年),竟從未用過 do-while(尷尬),于是問了群里的小伙伴,發(fā)現(xiàn)也是鮮有人用。

do-while,Java中容易被忽略的語句

do-while 語法分析

我們先來了解一下 do-while 的語法:

do {
     // statements
} while (expression);

注意:最后一個分號不能省略,否則會提示編譯出錯

它的執(zhí)行流程如下圖所示:

do-while,Java中容易被忽略的語句

那它究竟在什么地方用呢?

do-while 使用場景

在我多次的搜索和請教下,終于找到了兩個相對滿意的使用場景,接下來一起來看。

使用場景一:搶票

對于搶票業(yè)務(wù)來說,無論三七二十一,先搶了再說,然后在判斷是否搶票成功,如果搶票成功則退出循環(huán),否則繼續(xù)執(zhí)行搶票,實現(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)制就會執(zhí)行此方法,在進(jìn)制轉(zhuǎn)換的業(yè)務(wù)中,無論任何情況,一定會至少執(zhí)行一次進(jìn)制轉(zhuǎn)換的,因此這種業(yè)務(wù)場景就非常適合 do-while。

總結(jié)

孔子說:溫故而知新。當(dāng)我們學(xué)完很多知識之后,回過頭來再琢磨這些知識,發(fā)現(xiàn)很有趣,這就是知識的一大樂趣吧。本文我們介紹了兩種 do-while 的使用場景,搶票和進(jìn)制轉(zhuǎn)換,你還知道哪些 do-while 的使用場景嗎?

以上就是W3Cschool編程獅關(guān)于do-while,Java中容易被忽略的語句的相關(guān)介紹了,希望對大家有所幫助。

0 人點贊