今天在複習Java的時候,發現一個Java的break語句和continue語句和C++/C語言裡面的有點不同。
首先來介紹一下break和continue語句:
break 和continue 語句都能夠跳過部分代碼。
可以在switch 語句或任何迴圈中使用break語句,使程式跳到switch或迴圈後面的語句處執行。
continue 語句用於迴圈中,讓程式跳過迴圈中餘下的代碼,並開始新一輪迴圈。
首先在兩種語言裡面break和continue的基本用法都是一致的。
我們這裡主要說說他們的不同點。
java中的break包含帶標號的break語句和不帶標號的break語句兩種。
不帶標號:只是跳出當前break語句所在的迴圈,用法和C++的break一樣。
而帶標號:不僅能跳出當前break所在的迴圈,還可以跳出標號所指的迴圈。
而在C++裡面似乎不能帶標號。
下面我們用例子來說明:
我們來看看Java帶標號的例子:
package testonr;public class One {public static void main(String[] args) {outer:for(int i = 0; i < 10; i++){System.out.print("i="+i+"\t,j=");for(int j = 0; j <= i; j++){System.out.print(j+"\t");if(i+j == 16){System.out.print("迴圈中斷。");break outer;}}System.out.println("外來迴圈最後一句。");}}}輸入結果:
同樣的代碼在C++中報錯:
那麼我們去掉標號,試試。
#include <iostream>using namespace std;void main(){ for (int i = 0; i < 10; i++){cout << "i=" << i << "\t,j=";for (int j = 0; j <= i; j++){cout << j << "\t";if (i + j == 16){cout << "迴圈中斷。";break;}}cout << "外層迴圈最後一句" << endl;}}
輸出結果:
從圖中對比可以看出,Java裡面的 帶標號的break語句 在跳出當前break語句所在的迴圈外,還跳出了標號指定的迴圈語句。
而C++裡面break 是不可以和Java一樣直接跟標號的,所以只能跳出break語句所在的迴圈,而無法跳出其他的迴圈,所以我們可以在C++的輸出語句裡面看到比Java多輸出了一行(即Java跳出的標號所指的大迴圈,而C++並沒有跳出)。
再來看看continue語句:
java帶標號:
package testonr;public class One {public static void main(String[] args) {System.out.println("100內的素數為:");loop:for(int i = 2; i < 100; i++){for(int j = 2; j < i/2; j++){if(i%j == 0)continue loop;}System.out.print(" "+i);}}}
輸出結果:
C++還是一樣報錯:
我們去掉contiune後面跟的標號試試:
#include <iostream>using namespace std;void main(){ for (int i = 2; i < 100; i++){for (int j = 2; j < i/2; j++){if (i % j == 0)continue;}cout << " " << i;}}
輸出結果:
這裡我們就能看出比較大的差異。
先來分析一下Java的代碼:
此處的loop為外迴圈的標號,當執行到if(i%j==0)的時候,如果if條件成立,就執行contiune,程式執行流程不僅跳出了當前continue所在的迴圈(小迴圈)還跳出標號loop標註的本次迴圈,因為只要條件成立就表示它不是素數,也就不需要輸出,此處直接跳過。
而C++的語句裡面,執行到if(i%j==0)的時候,如果條件成立執行continue,程式只跳出了當前continue所在的迴圈(內迴圈),而沒有跳出大迴圈,所以,無論if的條件成立與否都會執行大迴圈裡面的輸出語句。
總結:小弟作為一個初學者不是為了證明某一種語言的孰優孰劣,而是單純的討論這個無意中發現的差別,如果有錯誤的地方,希望各位大神歡迎指出,小弟感激不盡。