App下載

do-while,Java中容易被忽略的語(yǔ)句

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

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

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

do-while,Java中容易被忽略的語(yǔ)句

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

do-while,Java中容易被忽略的語(yǔ)句

do-while 語(yǔ)法分析

我們先來(lái)了解一下 do-while 的語(yǔ)法:

do {
     // statements
} while (expression);

注意:最后一個(gè)分號(hào)不能省略,否則會(huì)提示編譯出錯(cuò)。

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

do-while,Java中容易被忽略的語(yǔ)句

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

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)景嗎?

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

0 人點(diǎn)贊