一、流程控制
1.1 概述:
在一個程式執行的過程中,各條語句的執行順序對程式的結果是有直接影響的。也就是說,程式的流程對運作結果
有直接的影響。是以,我們必須清楚每條語句的執行流程。而且,很多時候我們要通過控制語句的執行順序來實作
我們要完成的功能。
1.2 順序結構
public static void main(String[] args){
//順序執行,根據編寫的順序,從上到下運作
System.out.println(1);
System.out.println(2);
System.out.println(3);
}
二、判斷語句
2.1 判斷語句 -- if
if (關系表達式) {
語句體;
}
執行流程:
* 首先判斷關系表達式看其結果是true還是false.
* 如果是true就執行語句體
* 如果是false就不執行語句體
public static void main(String[] args) {
System.out.println("開始");
// 定義兩個變量
int a = 10;
int b = 20;
// 變量使用if判斷
if (a == b) {
System.out.println("a等于b");
}
int c = 10;
if (a == c) {
System.out.println("a等于c");
}
System.out.println("結束");
}
2.2 判斷語句 if...else
if(關系表達式) {
語句體A;
}else {
語句體B;
}
執行流程:
* 首先判斷關系表達式看其結果true還是false
* 如果是true就執行語句體A
* 如果是false就執行語句體B
public static void main(String[] args) {
// 判斷給定的資料是奇數還是偶數
// 定義變量
int a = 1;
if (a % 2 == 0){
System.out.println("a是偶數");
} else {
System.out.println("a是奇數");
}
System.out.println("結束");
}
2.3 判斷語句 if...else if...else
if語句第三種格式: if...else if...else
if (判斷條件1) {
執行語句1;
} else if (判斷條件2) {
執行語句2;
}
...
}else if (判斷條件n) {
執行語句n;
} else {
執行語句n+1;
}
執行流程
* 首先判斷關系表達式1看其結果是true還是false
* 如果是true就執行語句體1
* 如果是false就繼續判斷關系表達式2看其結果是true還是false.
* 如果是true就執行語句體2
* 如果是false就繼續判斷關系表達式...看其結果是true還是false
* ...
* 如果沒有任何關系表達式為true,就執行語句體n+1
練習:
指定考試成績,判斷學生等級
90-100 優秀
80-89 好
70-79 良
60-69 及格
60 以下 不及格
public static void main(String[] args) {
int score = 120;
if (score >= 90 && score <= 100) {
System.out.println("優秀");
} else if (score >= 80 && score < 90) {
System.out.println("好");
} else if (score >= 70 && score < 80) {
System.out.println("良");
} else if (score >= 60 && score < 70) {
System.out.println("及格");
} else if (score >= 0 && score < 60) {
System.out.println("不及格");
} else { // 單獨處理邊界之外的不合理情況
System.out.println("資料錯誤");
}
}
2.4 if語句和三元運算符的互換
在某些簡單的應用中,if語句是可以和三元運算符互換使用的。
public static void main(String[] args) {
int a = 10;
int b = 20;
//定義變量,儲存a和b的較大值
int c;
if(a > b) {
c = a;
} else {
c = b;
}
//可以上述功能改寫為三元運算符形式
c = a > b ? a:b;
}
三、選擇語句
3.1 選擇語句--switch
* switch語句格式:
switch(表達式) {
case 常量值:
語句體1;
break;
case 常量值:
語句體2;
break;
...
default:
語句體n+1;
break;
}
執行流程:
* 首先計算出表達式的值
* 其次,和case依次比較,一旦有對應的值,就會執行相應的語句,在執行的過程中,遇到break就會結束。
* 最後,如果所有的case都和表達式的值不比對,就會執行default語句體部分,然後程式結束掉。
public static void main(String[] args) {
// 定義變量,判斷是星期幾
int weekday = 6;
// switch語句實作選擇
switch (weekday) {
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;
}
}
switch 語句中,表達式的資料類型,可以是byte,short,int,char,enum(枚舉),JDK7後可以接收字元串。
3.2 case的穿透性
在switch語句中,如果case的後面不寫break,将出現空透現象,也就是不會在判斷下一個case的值,直接向後運作,直到遇到break,或者整體switch結束。
public static void main(String[] args) {
int i = 5;
switch (i){
case 0:
System.out.println("執行case0");
break;
case 5:
System.out.println("執行case5");
case 10:
System.out.println("執行case10");
default:
System.out.println("執行default");
}
上述程式中,執行case5後,由于沒有break語句,程式會一直向後走,不會在判斷case,也不會理會break,直接
運作完整體switch。
由于case存在穿透性,是以初學者在編寫switch語句時,必須要寫上break。