1. 程式人生 > 其它 >流程控制-順序結構、分支結構

流程控制-順序結構、分支結構

順序結構

  • 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;
        }
    }
}