5.1 概述
計算機源於生活,程序模擬現實生活,從而服務生活。如下生活例子:
(1)起牀,刷牙,洗臉,喫早餐,上課,回家,睡覺 ----->(順序)
(2)如果時間不太夠,打個滴滴快車,如果時間夠,坐個地鐵 ---->(選擇)
(3)擼完這個接口,又擼下一個接口 ----> (循環)
因此程序的執行流程有:
- 順序性
- 選擇性 (if else switch)
- 循環性 (for do while)
順序性就是程序自上往下執行,接下來分別講解條件分支語句與循環語句。
5.2 if 結構語句 (條件分支語句)
5.2.1 if 語句
語法結構
if(關係表達式) {
基本語句體
}
執行順序:首先判斷關係表達式的結果是 true 或 false,若爲 true,則執行基本語句體;反之不執行。
int i = 10 / 3; int j = 20 / 4; if(i > j) { System.out.println("i 較大") }
5.2.2 if else 語句
語法結構
if(關係表達式) {
語句體1;
} else {
語句體2;
}
執行順序:首先判斷關係表達式的結果是 true 或 false,若爲 true,則執行語句體1;反之則執行語句體2。如:我們常見的登錄,用戶輸入密碼,判斷密碼正確與否的操作如下:
import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("請輸入密碼:"); Scanner sca = new Scanner(System.in); String password = sca.next(); if("123456".equals(password)) { System.out.println("登錄成功"); } else { System.out.println("用戶名或密碼錯誤!"); } } }
Scanner 這個是 java.util 包下的一個類,因此需要 import 關鍵字進行引入,通過 Scanner 類來獲取用戶的輸入。new Scanner(System.in) 是創建一個這個類的對象(之後講解,先照着寫);next() 這個方法獲取輸入的字符串;equals() 方法是 String 類的方法,作用是比較兩個字符串的值是否相等(爲啥要特意標爲藍色,之後講解)。
5.2.3 多重 if
語法結構
if(關係表達式1) {
語句體1;
} else if(關係表達式2){
語句體2;
}
...
else {
語句體 n
}
執行順序:首先判斷關係表達式1的結果是 true 或 false,若爲 true,則執行語句體1;反之繼續判斷關係表達式2,若爲 true,則執行語句體2,依此類推。如:輸入學生成績,判斷學生成績等級,90 分以上(包含 90)爲 A,80 ~ 90 爲 B,70 ~ 80 爲 C,60 ~ 70 爲 D,其餘爲 E。
System.out.println("please input a score:"); Scanner scanner = new Scanner(System.in); int score= scanner.nextInt(); if(score >= 90) { System.out.println("該學生分數等級爲:A"); } else if(score >= 80) { System.out.println("該學生分數等級爲:B"); } else if(score >= 70) { System.out.println("該學生分數等級爲:C"); } else if(score >= 60) { System.out.println("該學生分數等級爲:D"); } else { System.out.println("該學生分數等級爲:E"); }
5.2.3 嵌套 if
語句結構:
if(條件表達式 1) {
if(條件表達式 2) {
語句體1;
} else {
語句體2;
}
}
執行順序類似上述例子。
5.3 Switch 語句 (條件分支語句)
語法結構:
switch(表達式) {
case 值 1 :
語句體1;
break;
case 值 2 :
語句體 2;
break;
...
default :
語句體 n;
break;
}
- case 後面跟的是要和表達式進行比較的值。
- break 表示中斷,結束的意思,用來結束 switch 語句。
- default 語句表示所有情況都不匹配的時候,就執行該處的內容,和if語句的 else 相似。
例子:用戶輸入1 ~ 7 的數字,每個數字對應周幾學習什麼課程。System.out.println("please input a dayNum:"); Scanner sca = new Scanner(System.in); int dayNum = sca.nextInt(); switch(dayNum) { case 1 : System.out.println("週一學 Java 基礎");break; case 2 : System.out.println("週二學 SQL");break; case 3 : System.out.println("週三學 JavaScript");break; case 4 : System.out.println("週四學戀愛學");break; case 5 : System.out.println("週五學煮飯");break; case 6 : System.out.println("週六學刺激戰場");break; default : System.out.println("週日學王者榮耀");break; }
注:
- case 後面的值不可相同;
- default 可以忽略寫;
- break 也可以忽略寫,不過會繼續判斷下去,如上述例子,如果 case 1 後沒有 break,滿足條件後依然會繼續判斷,直到遇到 break 或執行到最後才結束。
- 在 jdk1.7 之前,switch 後面的表達式只能支持 byte、short、char、int 這幾個基本數據類型和其對應的封裝類型。switch 後面的括號裏面只能放int類型的值,但由於 byte,short,char 類型,它們會 自動 轉換爲 int 類型(精精度小的向大的轉化),所以它們也支持。對於精度比 int 大的類型,比如 long、float,doulble,不會自動轉換爲 int,如果想使用,就必須強轉爲 int,如 (int)float;jdk1.7 後,整形,枚舉類型,boolean,字符串都可以。
5.4 for (循環語句)
語法結構:
for(初始化語句; 條件判斷語句; 條件控制語句) {
循環體語句;
}
執行流程:
- (1)執行初始化語句;
- (2)執行條件判斷語句,如果返回 false,則結束循環;反之第(3)步。
- (3)執行循環體語句;
- (4)執行條件控制語句;
- (5)回到(2)繼續。圖解如下:
例子:求出 1~10 之間數據之和。int sum = 0; for(int i = 1; i <= 10; i++) { sum += i; } System.out.println("1~10 之間數據之和爲:" + sum);
可自行測試嵌套 if else 語句。
5.5 While(循環語句)
語法結構:
while(判斷條件語句) {
循環體語句;
控制條件語句;
}
執行流程:
- (1)執行條件判斷語句,若返回 false,則結束,反之執行第(2)步;
- (2)執行循環體;
- (3)執行條件控制語句;
- (4)回到(1)繼續。圖解如下:
例子:求出 1~10 之間數據之和。int i = 1; int sum = 0; while (i <= 10) { sum += i; i++; } System.out.println("1~10 之間數據之和爲:" + sum);
可自行嘗試“輸入登錄密碼,超過 3 次則提示賬戶鎖定,輸入成功則直接跳出”
5.6 do While(循環語句)
語法結構:
do {
循環體語句;
條件控制語句;
} while(判斷條件語句);
執行流程:
- (1)先執行循環體語句;
- (2)執行條件控制語句;
- (3)執行條件判斷語句,若返回 false,則結束循環,反之執行第(1)步,圖解如下:
例子:求出 1~10 之間數據之和。int i = 1; int sum = 0; do { sum += i; i++; } while(i <= 10); System.out.println("1~10 之間數據之和爲:" + sum);
5.7 嵌套循環
打印如下標誌:
*****
****
***
**
*
for(int i = 0; i < 5; i++) {
for(int j = 5; j > i; j--) {
System.out.print("*");
}
System.out.println();
}
打印如下標誌:
*****
****
***
**
*
for(int i = 0; i < 5; i++) {
for(int j = 0; j < i; j++) {
System.out.print(" ");
}
for(int j = 5; j > i; j--) {
System.out.print("*");
}
System.out.println();
}
打印九九乘法表:
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(j + " * " + i + " = " + i * j + "\t");
}
System.out.println();
}
5.8 break,continue,return(循環語句)
5.8.1 break
break 在 switch 中已經講解,在循環語句中是跳出當前循環。如:打印 1~10 之間的數字,如果中間遇到 3 的倍數則退出循環
for(int i = 1; i < 10; i++){
if(i % 3 == 0) {
break;
}
System.out.print(i + “\t”);
}
輸出結果是:1 2
5.8.2 continue
在循環語句中用於結束本次循環。如:打印 1~10 之間的數字,如果中間遇到 3 的倍數則跳過不打印,繼續打印後面的數據。
for(int i = 1; i < 10; i++){
if(i % 3 == 0) {
continue;
}
System.out.print(i + "\t");
}
輸出結果是:1 2 4 5 7 8
5.8.3 return
return 語句用於結束當前正在執行的方法,並將控制權返回給調用此方法的方法。其有兩種形式:
- 沒有返回值的方法
不帶返回值的 return 語句只能用於返回類型爲 void 的方法。在返回類型爲 void 的方法中,return 返回語句不是必需的,隱式的 return 發生在方法最後一個語句完成時。main 方法就是這樣一個例子。一般情況下,返回類型是 void 的方法使用 return 語句是爲了引起方法的強制結束,這種 return 的用法類似於循環結構中的 break 語句的作用。
- 有返回值的方法
任何返回類型不是 void 的方法必須返回一個值,而且這個返回值的類型必須和方法的返回類型相同,或者能隱式轉化爲方法的返回類型。
public static void main(String[] args) {
System.out.println("請分別輸入要連個要判斷大小的數字(空格隔開):");
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println("最大值爲:" + getMax(num1, num2));
}
/**
* 判斷是否爲偶數,是返回true
* @param num1
* @param num2
* @return
*/
public static int getMax(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
可到牛客網做練習。
至此,Java 條件分支語句與循環語句大體瞭解了,接下來請看《 6 Java 方法》