3 回答
TA貢獻1843條經驗 獲得超7個贊
我想你主要問的是這個吧:當執行完switch(0)后,continue,然后本次循環結束,就是說switch(0)也結束了,但是在執行for(i=1)和switch(1)之前為什么沒有執行后面的輸出語句輸出w的值.
要跳出switch語句有兩種方法break和switch語句執行完畢。
case中如果沒有break的話它就不會跳出switch,continue跳不出switch語句,continue的意思為本次循環結束.
它在這個程序中就是i=0等的結束,而并不是跳出swich語句。所以switch會回到for()找到i的下一個值接著執行.
例如本程序執行完i=0后又找到i=1執行,如果還是沒有遇到break或執行完畢的話它就接著找,直到執行完畢或找到break,跳出switch語句,然后再執行后面的輸出語句.
最容易進入的誤區就是以為遇到continue就認為跳出了switch,然后就開始print.
case樓上的都說得很清楚了.很容易解決.
TA貢獻1890條經驗 獲得超9個贊
沒有運行就沒有發言權,我運行了,是7 13 15
你應該在沒句case 2:w+=1; 后面加 break;
這樣就跳到下面去了,如果沒有他,就繼續執行下面的語句
比如case 3:w+=1;
case 0:w+=1;
如果你給的3 W先是1 執行完后,沒有BREAK;就繼續執行下面的,W=2;
依次類推
TA貢獻1818條經驗 獲得超11個贊
輸出結果沒有錯
加了測試代碼和注釋,這樣思路就清晰多了
package testcode;
public class Switchtest {
int i = 0, w = 0;//實例變量,作用于整個類
public Switchtest() {//這個為構造函數,創建對象時就自動執行里面的代碼
for (; i <= 5; i++) {//初始條件永遠為true
switch (i)//把循環后的i作為switch參數,關鍵在與switch沒有break語句,用continue跳轉
{
case 3://如果i為3 w 加1,如果匹配到一個以后由于沒有break下面的就不再匹配按順序執行了,以下同樣的說明省略
w += 1;
System.out.println("i = "+i+" case 3=" + w);
case 0://如果i為0 w 加1
w += 1;
System.out.println("i = "+i+" case 0=" + w);
case 1://如果i為1 w 加1,并跳出到上級循環,即跳到for外面:
w += 1;
System.out.println("i = "+i+" case 1=" + w);
continue;
case 2://如果i為2 w 加1
w += 1;
System.out.println("i = "+i+" case 2=" + w);
case 4://如果i為4 w 加1
w += 1;
System.out.println("i = "+i+" case 4=" + w);
default://其他情況 w 加2
w += 2;
System.out.println("i = "+i+" case default=" + w);
}
System.out.println("i = "+i+" " + w);//輸出w的值
}
}
public static void main(String[] args) {
Switchtest stest = new Switchtest();//創建一個Switchtest對象
}
}
---------------------
輸出結果為:
i = 0 case 0=1
i = 0 case 1=2
i = 1 case 1=3
i = 2 case 2=4
i = 2 case 4=5
i = 2 case default=7
i = 2 7
i = 3 case 3=8
i = 3 case 0=9
i = 3 case 1=10
i = 4 case 4=11
i = 4 case default=13
i = 4 13
i = 5 case default=15
i = 5 15
添加回答
舉報
