一般來(lái)說(shuō)一個(gè)復(fù)雜的程序邏輯可以歸入以下三種結(jié)構(gòu)之一:順序結(jié)構(gòu)(從上往下逐行執(zhí)行,每句都執(zhí)行)、分支結(jié)構(gòu)(有條件地執(zhí)行某語(yǔ)句,并非每句都執(zhí)行)、循環(huán)結(jié)構(gòu)(反復(fù)執(zhí)行相同或相似的代碼)。不同的結(jié)構(gòu),代碼的語(yǔ)法結(jié)構(gòu)也是各不相同,今天和大家一起聊一聊常見(jiàn)的循環(huán)語(yǔ)句。
在實(shí)際問(wèn)題當(dāng)中會(huì)遇到有規(guī)律的重復(fù)性操作,對(duì)應(yīng)到程序中就需要重復(fù)執(zhí)行某些語(yǔ)句,一組被重復(fù)執(zhí)行的語(yǔ)句稱(chēng)之為循環(huán)體。目前較流行的編程語(yǔ)言(C、Java、Python)當(dāng)中有三種類(lèi)型的循環(huán)語(yǔ)句:for語(yǔ)句、while語(yǔ)句和dowhile語(yǔ)句。在循環(huán)語(yǔ)句結(jié)構(gòu)中有三個(gè)要素:循環(huán)變量的初始化、循環(huán)的條件(以循環(huán)變量為基礎(chǔ))、循環(huán)變量的改變(向著循環(huán)的結(jié)束變化)。
在循環(huán)語(yǔ)句練習(xí)中經(jīng)常有同學(xué)會(huì)問(wèn)小陳老師while語(yǔ)句和dowhile語(yǔ)句的區(qū)別,今天我也著重講一下兩者的區(qū)別以及注意事項(xiàng)。
首先對(duì)比一下圖片中左右段代碼的區(qū)別,并思考一下運(yùn)行后輸出的結(jié)果是否相同,從中我們不難看出兩者初始變量num值都為1,循環(huán)的條件都為num小于10,循環(huán)變量的更新也是num每次增加1,并且輸出的語(yǔ)句都是一樣的,所以?xún)烧哌\(yùn)行輸出后的結(jié)果都為1-10。
如果對(duì)兩段代碼的循環(huán)條件稍加改變,將num<10改為num<0。運(yùn)行的結(jié)果就完全不相同了,左邊while代碼運(yùn)行后不輸出任何東西,右邊dowhile代碼運(yùn)行后輸出數(shù)字1。
這是為什么呢?其實(shí),最關(guān)鍵的原因在于循環(huán)過(guò)程中執(zhí)行的順序,在while循環(huán)中,num1首先被賦值為1,其次會(huì)對(duì)num1進(jìn)行一個(gè)判斷查看num1是否小于0,如果num1小于0不執(zhí)行循環(huán)體內(nèi)容,直接結(jié)束循環(huán),輸出結(jié)果為空。
在dowhile循環(huán)中,num2首先被賦值為1,直接執(zhí)行循環(huán)體中的內(nèi)容,輸出數(shù)字1,最后進(jìn)行判斷num2是否小于0,如果小于0結(jié)束循環(huán)。
所以while循環(huán)和dowhile循環(huán)運(yùn)行的結(jié)果可能是相同的,但是在特殊的環(huán)境下也存在運(yùn)行結(jié)果不相同的情況。
簡(jiǎn)單總結(jié),while循環(huán)會(huì)首先判斷一個(gè)條件是否滿(mǎn)足,如果條件滿(mǎn)足,則執(zhí)行后面緊跟著的語(yǔ)句或語(yǔ)句括號(hào),然后再次判斷條件是否滿(mǎn)足,如果條件滿(mǎn)足則再次執(zhí)行,直到條件不滿(mǎn)足為止。dowhile循環(huán)和while循環(huán)很像,唯一的區(qū)別是在循環(huán)體執(zhí)行結(jié)束的時(shí)候才來(lái)判斷條件。也就是說(shuō),無(wú)論如何,循環(huán)都會(huì)執(zhí)行至少一遍,然后再來(lái)判斷條件。