2.6 流程控制
阿新 • • 發佈:2018-12-31
一、結構:
java程式的流程控制分為3種:順序結構、分支結構、迴圈結構;
1.1順結構:
順序結構只能順序執行,不能進行判斷和選擇,因此需要分支結構。
1.2分支結構;
if和switch語句;
1.2.1 if單分支:
public class Test{ public static void main(String[] args){ // 隨機產生一個隨機整數[10,30] int r = (int)(Math.random()*(30-10+1)) + 10; if(r > 15){ System.out.println(r+">15"); }else{ System.out.println(r+"<=15"); } } }
1.2.2if 多分支:
public class Test01{ public static void main(String[] args){ // 隨機產生一個隨機整數[10,30] int r = (int)(Math.random()*(30-10+1)) + 10;if(r > 15){ System.out.println(r+">15"); }else if(r == 15){ System.out.println(r+"=15"); }else{ System.out.println(r+"<15"); } } }
注意:
a、 if、else關鍵字只能寫一次,else if視情況而定;
b、if多分支時,如果判斷大於大的值,用>,如果判斷小於小的值,用<號,進行程式碼優化;
1.3 if巢狀
public class Test{ public static void main(String[] args){ float time = 9.5f; char sex = '男'; // [1] 進入決賽 if(time < 10){ // [2]性別判斷 if(sex == '男'){ System.out.println("進入男子組"); }else { System.out.println("進入女子組"); } }else{ System.out.println("oops,不能進入決賽"); } } }
注意:巢狀的深度不易超過4層。
1.4 多值匹配分支switch
public class Test{ public static void main(String[] args){ switch(week){ case 1:{ System.out.println("寫程式碼"); // 結束繼續匹配 break; } case 2:{ System.out.println("看電影"); break; } case 3:{ System.out.println("打遊戲"); break; } case 4:{ System.out.println("旅遊"); break; } case 5:{ System.out.println("開房打遊戲"); break; } case 6:{ System.out.println("打牌"); break; } case 7:{ System.out.println("睡覺"); break; } default:{ System.out.println("預設匹配..."); break; } } } }
1.5 switch的兩種特殊的情況:
1.5.1 省略break;
public class Test{ public static void main(String[] args){ int week = 1; switch(week){ case 1:{ System.out.println("寫程式碼"); } case 2:{ System.out.println("看電影"); } case 3:{ System.out.println("打遊戲"); break; } case 4:{ System.out.println("旅遊"); break; } case 5:{ System.out.println("開房打遊戲"); break; } case 6:{ System.out.println("打牌"); break; } case 7:{ System.out.println("睡覺"); break; } default:{ System.out.println("預設匹配..."); break; } } } }
輸出:寫程式碼 看電影 打遊戲;
1.5.2 當多個case的結果一行時,可以省略整個語句塊;
public class Test08{ public static void main(String[] args){ // 隨機產生一個字元(a-z)判斷是母音還是子音 // [a,z] // [0,25]+a int r = (int)(Math.random() * (25-0+1)) + 0; char c = (char)(r + 'a'); System.out.println("c = " + c); switch(c){ case 'a': case 'e': case 'i': case 'o': case 'u':{ System.out.println("母音:"+c); break; } case 'y': case 'r': case 'w':{ System.out.println("半母音:"+c); break; } default:{ System.out.println("子音:"+c); break; } } } }
注意:switch表示式支援的匹配方式有整形、char、字串(jdk1.7以上),迫不得已時不要用字串匹配,字串在switch匹配過程中,效率極低。
二、if 和 switch 的比較:
2.1 對比:
相同點:都是分支語句;
不同點:switch 只能進行等值匹配,且條件必須是整形、char型別,jdk1.7之後支援字串。
if 沒有switch選擇結構的限制,特別適合某個變數處於某個連續區間時的情況;