循環(中斷和返回、繼續、標籤)- 1

“嗨,阿米戈!”

“今天我會告訴你一些在使用循環時很方便的事情。”

“第一個是關鍵字break。如果你在循環體中使用這個命令,那麼循環將在命令執行時立即終止。這是一個例子:”

例子 輸出:
for (int i = 0; i < 10; i++)
{
System.out.println(i);
if (i > 5)
break;
}
0
1
2
3
4
5

“break只能在循環中使用嗎?”

“是的。break語句只能在循環中使用,當執行break語句時,循環立即終止。”

“好的,我知道了。”

“太好了。現在我要分享的第二件事是關鍵字continue。它也只能在循環中使用。當執行此命令時,將立即開始新的循環迭代。換句話說,任何剩餘的代碼在循環中循環的主體被簡單地跳過了。”

“這是一個例子:”

例子 輸出:
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
continue;
System.out.println(i);
}
1
3
5
7
9

“那麼,一旦程序在循環中到達一個繼續命令,它就會停止執行循環中的代碼?”

“不,你看,當我們多次執行相同的代碼時,我們有一個循環。在上面的例子中,我們有一個從 0 到 9 的循環,即循環體將執行 10 次。對吧?”

“是的。”

“通過循環體一次稱為迭代。我們的循環包含 10 次迭代——循環體將執行十次。”

“是的,這很清楚。”

continue命令提前終止當前迭代,即跳過循環內的任何剩餘代碼並開始新的迭代。”

“這是另一個例子:”

例子
ArrayList list = new ArrayList();
for (Object o: list)
{
if (o == null) continue;
System.out.println(o.toString());
}

“在這個例子中,我們顯示了列表中所有對象的字符串表示形式。但是我們跳過了所有為空的對象。”

“行了,知道了,我看這多方便了。”

“是的。我還想告訴你關於標籤的事。它們在 Java 中很少使用,因為它們經常違反程序邏輯的美感。但你可能會在某些時候在代碼中遇到它們。所以我寧願告訴你關於他們比你在操場上聽說過的還要多。”

“曾幾何時,允許從代碼中的任何行跳轉到任何行。我們使用標籤和 goto 語句來做到這一點。它看起來是這樣的:”

帶有標籤的可怕代碼
System.out.println("Make cookies,");
label: System.out.println("not");
System.out.println("war");
goto label;

“在這個例子中,執行goto label命令後,程序跳轉到標記為label的行。

“後來大家見機行事,決定不用goto語句了,Java不支持goto,不過goto是保留字,沒什麼大不了的……”

“所以,在 Java 中沒有 goto 和標籤?”

“沒有goto語句,但是有標籤!”

“怎麼可能?”

“在 Java 中,標籤可以與 continue 和 break 命令一起使用。當你有很多嵌套循環時使用它們。”

“例如,假設你有 5 個嵌套循環,當滿足某些條件時,你想退出其中的三個,但不是全部。標籤是一種優雅的方式來做到這一點:”

例子
label1: for (int i = 0; i < 10; i++)
 label2: for (int j = 0; j < 10; j++)
  label3: for (int k =0; k < 10; k++)
   if (i == j && j == k)
    break label2;

“在這個例子中,當 break 語句被執行時,我們不是退出帶有變量 k 的循環,而是退出標記為 label2 的循環——即我們立即退出帶有 k 和 j 的兩個循環。”

“多久用一次?”

“老實說,不經常,但你永遠不知道。也許你會在某個時候看到它。這些是語法基礎——你需要知道這一切!”

“好的。謝謝你,Bilaabo。”