Java程序設計的基本結構 - 選擇結構
文本關鍵字:基本結構、選擇結構、if、else、switch、case
一、if-else結構
使用if-else選擇結構時,一個最基本的原則就是一定會有一個判斷條件,並且如果出現else一定會有一個與之對應的if。
- 代碼格式:if(判斷條件){}else{}
- 判斷條件部分可以直接使用布爾值:true/false
- 如果使用表達式作爲判斷條件則必須要保證最終的計算結果爲布爾類型
對於switch-case結構,整體的結構與if-else不同,雖然也是進行判斷,但是switch-case是指定一個變量或表達式作爲需要比對的值,通過case來羅列與之匹配的值,並寫出該情況下需要執行的代碼。
- 代碼格式:switch(變量或表達式){case 匹配值:代碼片段;default:代碼片段;}
- 變量或表達式結果的類型只能爲:整數類型(byte、short、int),字符串String,字符char,枚舉enum
- case本身具有穿透的特點,會從一個匹配的case進入執行,直到遇到break;爲止
- default關鍵字可以不出現,如果出現只能出現在最後的位置,在所有case都沒有匹配時執行(如果離default最近的一個case沒有使用break,則也可能會被執行)
1. 單if結構
單if結構是最簡單的選擇結構,表達的含義是:符合條件時,執行部分代碼,不符合條件時,什麼都不做,繼續執行選擇結構之後的代碼。需要注意的是,if用小括號裝一個條件,默認只能控制一條語句,如果需要控制多條語句需要使用大括號。
public static void main(Stirng[] args){
// 假如有如下場景:你每天回家都要彙報你的考試成績和完成家庭作業
// 如果你考的不錯(90分以上),那麼就會得到一次誇獎
// 如果考的不怎麼樣,就什麼都不會發生
// 而且,不管考的怎麼樣,作業都是要完成的,就是如此的悲催
int score = 92;
if(score >= 90){
// 爲了避免不必要的麻煩,即使是一行代碼我們也加上大括號,這招挺管用的!
System.out.println("考的不錯!");
}
System.out.println("開始寫作業");
}
2. if-else結構
if-else結構是最基本的選擇結構,明確一個判斷條件後,指定條件成立時做什麼,條件不成立時做什麼。
public static void main(Stirng[] args){
// 假如有如下場景:根據不同的年級進入不同的活動教室
// 3年級及以下的學生進入活動室一
// 其他年級學生進入活動教室二
int grade = 2;
if(grade <= 3){
// 爲了避免不必要的麻煩,即使是一行代碼我們也加上大括號,這招挺管用的!
System.out.println("進入活動教室一");
}else{
System.out.println("進入活動教室二");
}
}
3. if-else if-else結構
如果我們需要具體判斷的條件很多,那麼我們就需要使用到多個if。需要注意的是,我們可以在一段程序中使用多個並列的if-else結構,但是這和if-eles if-else的結構並不等效,請看流程圖。
並列的if-else結構,每個if後面都可以引導判斷條件,但是相互之間相對獨立,無關聯。
// 僞代碼如下:
public static void main(Stirng[] args){
if(條件){
// 程序代碼
}else{
// 程序代碼
}
if(條件){
// 程序代碼
}else{
// 程序代碼
}
}
對於if-else if-else結構,如果一個if中的條件爲真,則其他的判斷分支將不會執行,即使判斷結果爲真!
// 僞代碼如下:
public static void main(Stirng[] args){
if(條件){
// 程序代碼
}else if(條件){
// 程序代碼
}else{
// 程序代碼
}
}
4. 嵌套結構
掌握了基本條件判斷結構後,對於複雜問題可能需要使用到嵌套結構。比如某一個問題需要分兩種或多種情況討論,而這幾種情況又需要進一步分多種情況討論。
// 僞代碼如下:
public static void main(Stirng[] args){
if(條件){
// 程序代碼
if(條件){
// 程序代碼
}else{
// 程序代碼
}
}else{
// 程序代碼
}
}
二、switch-case
switch-case結構也是選擇結構的一種,主要使用在選擇條件較多,並且主要是等值判斷時。如果我們需要使用switch-case結構進行某一個範圍的判斷,那就需要下一點功夫來進行轉換。
1. 含有break和default
在這種情況下會按次序進行判斷執行匹配到的case後面的代碼,執行完畢後直接結束switch-case結構,當所有的case都沒有匹配時,會執行default相關的代碼。
public static void main(Stirng[] args){
String sex = "女";
switch(sex){
case "男":
System.out.println("男生");
break;
case "女":
System.out.println("女生");
break;
default:
System.out.println("怕是變異了?");
}
}
2. 無break
當case對應的值被匹配到後,對應的代碼會被執行,由於沒有break,將會繼續執行下一個case對應的代碼(包括default),直到整個switch-case都結束或遇到一個break爲止。
public static void main(Stirng[] args){
// 有的時候我們剛好可以利用一下穿透的特點,來進行區間的判斷
// 下面是一個經典案例:根據分數進行分檔
// 90-100:A,80-89:B,70-79:C,60-69:D,0-59:不及格,其他:錯誤的分數
int score = 75;
// switch的括號中可以使用表達式,只要計算結果的類型滿足要求即可
// 對分數進行區間的劃分,相當於變向的範圍判斷
switch(score / 10){
case 10:
// 此處什麼都不填寫,匹配到之後自動去執行case9對應的代碼
// 但是case10不能省略,否則會丟失100分時的情況
case 9:
System.out.println("A");
break;
case 8:
System.out.println("B");
break;
case 7:
System.out.println("C");
break;
case 6:
System.out.println("D");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
// 繼續使用穿透的特點,表示0-59分時的情況
System.out.println("不及格");
break;
default:
// 當分數爲負數或大於100分時執行這部分的代碼
System.out.println("成績錄入有誤");
}
}