在本教程中,您將在示例的幫助下了解Java中的continue語(yǔ)句和標(biāo)記為continue的語(yǔ)句。
在處理循環(huán)時(shí),有時(shí)需要跳過(guò)循環(huán)中的某些語(yǔ)句,或者在不檢查測(cè)試表達(dá)式的情況下立即終止循環(huán)。
在這種情況下,將使用break和continue語(yǔ)句。要了解該break語(yǔ)句,請(qǐng)?jiān)L問(wèn)Java break。
Java中的continue語(yǔ)句跳過(guò)循環(huán)的當(dāng)前迭代(for,while,do…while等),程序的控制權(quán)移到循環(huán)的末尾。并計(jì)算循環(huán)的測(cè)試表達(dá)式。
對(duì)于for循環(huán),update語(yǔ)句在測(cè)試表達(dá)式之前執(zhí)行。
continue語(yǔ)句幾乎總是在(if ... else語(yǔ)句)決策語(yǔ)句中使用。它的語(yǔ)法是:
continue;
class Test { public static void main(String[] args) { // for循環(huán) for (int i = 1; i <= 10; ++i) { //如果i的值在4和9之間,則執(zhí)行continue if (i > 4 && i < 9) { continue; } System.out.println(i); } } }
輸出:
1 2 3 4 9 10
在上面的程序中,我們使用for循環(huán)來(lái)打印每次迭代中i的值。要了解for循環(huán)的工作原理,請(qǐng)?jiān)L問(wèn)Java for循環(huán)。在這里,請(qǐng)注意以下語(yǔ)句:
if (i > 5 && i < 9) { continue; }
這意味著當(dāng)i的值大于4小于9時(shí),將跳過(guò)循環(huán)中的print語(yǔ)句。因此,我們將跳過(guò)值5、6、7和8的輸出。
下面的程序計(jì)算用戶輸入的5個(gè)正數(shù)的總和。如果用戶輸入負(fù)數(shù)或零,則將其從計(jì)算中跳過(guò)。
為了接受用戶的輸入,我們使用了該Scanner對(duì)象。要了解更多信息Scanner,請(qǐng)?jiān)L問(wèn)Java Scanner。
import java.util.Scanner; class AssignmentOperator { public static void main(String[] args) { Double number, sum = 0.0; //創(chuàng)建Scanner對(duì)象 Scanner input = new Scanner(System.in); for (int i = 1; i < 6; ++i) { System.out.print("輸入一個(gè)數(shù)字: "); //接受double類型的數(shù)據(jù)輸入 number = input.nextDouble(); //如果number為負(fù)數(shù),則跳過(guò)迭代 if (number <= 0.0) { continue; } sum += number; } System.out.println("Sum = " + sum); } }
輸出:
輸入一個(gè)數(shù)字: 2.2 輸入一個(gè)數(shù)字: 5.6 輸入一個(gè)數(shù)字: 0 輸入一個(gè)數(shù)字: -2.4 輸入一個(gè)數(shù)字: -3 Sum = 7.8
在上面的程序中,請(qǐng)注意以下行:
if (number < 0.0) { continue; }
這意味著當(dāng)用戶輸入負(fù)數(shù)時(shí),將跳過(guò)循環(huán)的當(dāng)前迭代。下一個(gè)迭代就開(kāi)始了。
如果是嵌套循環(huán),則continue將跳過(guò)最內(nèi)層循環(huán)的當(dāng)前迭代。
到目前為止,我們使用了未標(biāo)記的continue語(yǔ)句。它用于終止最內(nèi)層的循環(huán)和switch語(yǔ)句。然而,Java中還有另一種形式的continue語(yǔ)句,稱為標(biāo)記contine。
如上圖所示,我們使用label標(biāo)識(shí)符來(lái)指定外部循環(huán)?,F(xiàn)在,請(qǐng)注意如何使用該continue語(yǔ)句(continue label;)。
在這里,continue語(yǔ)句將跳過(guò)標(biāo)記語(yǔ)句的當(dāng)前迭代(即外部循環(huán))。然后,程序的控制轉(zhuǎn)到標(biāo)記語(yǔ)句的下一次迭代(外循環(huán))
class LabeledContinue { public static void main(String[] args) { //外部for循環(huán)標(biāo)記為label first: for (int i = 1; i < 6; ++i) { for (int j = 1; j < 5; ++j) { if (i == 3 || j == 2) //跳過(guò)標(biāo)簽的迭代(外部for循環(huán)) continue first; System.out.println("i = " + i + "; j = " + j); } } } }
輸出:
i = 1; j = 1 i = 2; j = 1 i = 4; j = 1 i = 5; j = 1
在上面的示例中,使用帶標(biāo)簽的continue語(yǔ)句跳過(guò)標(biāo)記為first的循環(huán)的當(dāng)前迭代。
if (i==3 || j==2) continue first;
在這里,我們可以看到最外層的for循環(huán)被標(biāo)記為first,
first: for (int i = 1; i < 6; ++i) {..}
因此,如果i的值為3或j的值為2,則跳過(guò)外部for循環(huán)的迭代。
注意:通常不建議使用帶標(biāo)簽的continue,因?yàn)檫@會(huì)使代碼難以理解。如果您處于必須使用標(biāo)記為continue的情況下,請(qǐng)重構(gòu)代碼并嘗試以不同的方式解決它,以使其更具可讀性。