流程控制-順序結構、分支結構
阿新 • • 發佈:2021-12-02
順序結構
- JAVA的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行。
- 順序結構是最簡單的演算法結構。
- 語句與語句之間,框與框之間是按照從上到下的順序進行的,它是由若干個依次執行的處理步驟組成的,它是任何一個演算法都離不開的一種基本演算法結構。
分支結構(選擇結構)
到達某個狀態時,可能會有多種情況,每種情況都需要提前準備好,所以多條路的路口就是一個分支。程式碼寫的多,程式執行的少。
分類:
- if單選擇結構
- if雙選擇結構
- if多選擇結構
- 巢狀的if結構
- switch多選擇結構
if單選擇結構
格式:
if(布林表示式){
//如果布林表示式為true將執行的語句
}
說明:
- if後面跟著的小括號,裡面必須是boolean型別的值;if語句後面的小括號中,只要是計算結果為boolean型別就合法
- 語句體可以是任意操作
執行流程:
- 計算布林表示式的值,要麼為true,要麼為false
- 如果計算結果為true,執行語句體
- 如果計算結果為false,就不執行語句體
import java.util.Scanner; public class IfDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("請輸入內容:"); String str = scanner.nextLine(); //equals:判斷字串是否相等 if(str.equals("Hello")){ System.out.println(str); } System.out.println("end"); scanner.close(); } }
輸出結果:
if雙選擇結構
格式:
if(布林表示式){
//如果布林表示式為true將執行的語句(語句體1)
}else{
//如果布林表示式為false將執行的語句(語句體2)
}
說明:
- 是否有某種情況,可以語句體1和語句體2都不執行?不可能,else就已經包含了if不滿足的所有狀態
- 是否有某種情況,可以讓語句體1和語句體2都執行?不可能,因為只要語句體1執行了,if語句就直接結束了
- 只能執行其中的一句,並且一定會執行其中一句
執行流程:
- 計算布林表示式的值,要麼是true,要麼是false
- 如果條件表示式的值為true,執行語句體1
- 如果條件表示式的值為false,執行語句體2
import java.util.Scanner;
public class IfDemo {
public static void main(String[] args) {
//考試分數大於60分就是及格,小於60分就是不及格
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入成績:");
int score = scanner.nextInt();
if (score>60){
System.out.println("合格");
}else{
System.out.println("不合格");
}
scanner.close();
}
}
輸出結果:
if多選擇結構
格式:
if(布林表示式1){
//如果布林表示式1的值為true執行程式碼(語句體1)
}else if(布林表示式2){
//如果布林表示式2的值為true執行程式碼(語句體2)
}
...
}else{
//如果以上布林表示式都不為true執行程式碼
}
執行流程:
- 計算布林表示式1,如果為true,就執行語句體1
- 如果布林表示式1為false,計算布林表示式2,如果為true,就執行語句體2
- 如果布林表示式2為false,就計算布林表示式3……
- 如果布林表示式1~布林表示式n全部為false,那麼就執行else裡的語句體
說明:
- 如果布林表示式2計算結果為true,執行語句體2(布林表示式1的條件不滿足)
- 只要一個語句體執行了,if語句就結束了
- 如果沒有else語句,可能一個語句體都不執行;如果有else語句就一定會執行其中的一句
- else語句必須在最後
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入成績:");
int score = scanner.nextInt();
if (score == 100){
System.out.println("恭喜滿分");
}else if (score < 100 && score >= 90){
System.out.println("A級");
}else if (score < 90 && score >= 80){
System.out.println("B級");
}else if (score < 80 && score >= 70){
System.out.println("C級");
}else if (score < 70 && score >= 60){
System.out.println("D級");
}else if (score < 60 && score >= 0){
System.out.println("不及格");
}else{
System.out.println("成績不合法");
}
scanner.close();
}
}
switch多選擇結構
格式:
switch(表示式){
case value1:
//語句體1
break;//可選
case value2:
//語句體2
break;//可選
default://可選
//語句
}
執行流程:
- 計算表示式的值,分別和各個常量匹配
- 如果和value1匹配,那麼就執行語句體1,break,switch語句就結束了
- 如果和value1不匹配,那麼就判斷是否和value2匹配,如果匹配就執行語句體2,break,switch語句就結束了
- 以此類推,如果value1~valuen全都沒有和表示式匹配的值,那麼就執行default中的內容,switch語句結束
注意事項:
- 表示式型別:byte short char int 列舉(jdk5開始) String(jdk7開始)
- case後面只能跟常量,不能跟變數
- 每個case的語句體後面一定要跟上一個break語句,否則就無法結束switch語句,併發生case穿透。如果多個情況是相同的邏輯執行,那麼就可以使用case穿透。
- default可以寫也可以不寫。如果不寫,就可能一個語句都執行不到,建議把default語句加上
- default語句可以寫在任意位置,無論寫在什麼位置,都是最後去匹配,建議把default語句寫在最後面
- switch語句結束的條件:碰到了break語句;碰到了右大括號
public class SwitchDemo {
public static void main(String[] args) {
char grade = 'C';
//case穿透 //switch匹配一個具體的值
switch(grade){
case 'A':
System.out.println("優秀");break;
case 'B':
System.out.println("良好");break;
case 'C':
System.out.println("及格");
case 'D':
System.out.println("再接再厲");
case 'E':
System.out.println("掛科");
default:
System.out.println("未知等級");
}
}
}
public class SwitchDemo {
public static void main(String[] args) {
String name = "哈哈";
//jdk7新特性,表示式結果可以是字串
switch(name){
case "哈哈":
System.out.println("哈哈");
break;
case "嘿嘿":
System.out.println("嘿嘿");
break;
default:
System.out.println("弄啥嘞!");
break;
}
}
}