【分支流程控制語句、迴圈流程控制語句】的學習

Y_W_LIANG發表於2020-11-05

選擇流程控制語句

也叫分支流程控制語句,用於在程式執行時進行流程控制通過條件判斷語句進行指定程式碼塊的執行

按照語法分為:

if。。else語句

switch。。case語句

語法

switch(變數){

​ case 值:

​ 語句體;

​ break;

​ default:

​ 語句體;

}

public static void main(String [] args){
		//建立掃描器物件
		Scanner sc=new Scanner(System.in);
		//獲取控制檯輸入
		String nextLine = sc.nextLine();
		switch(nextLine){
		case "A":
			System.out.println("90~100");
			break;
		case "B":
			System.out.println("70~89");
			break;
		case "C":
			System.out.println("60~69");
			break;
		case "D":
			System.out.println("0~59");
			break;
		default:
			System.out.println("輸入有誤!");
		}
		sc.close();
	}

格式解釋
switch表示這是switch語句
表示式的取值:byte,short,int,char
JDK5以後可以是列舉
JDK7以後可以是String
case後面跟的是要和表示式進行比較的值
語句體部分可以是一條或多條語句
break表示中斷,結束的意思,可以結束switch語句
default語句表示所有情況都不匹配的時候,就執行該處的內容,和if語句的else相似

switch…case使用的是值匹配(比較)的形式進行語句的控制,當指定變數的值與case後的值相等時,執行相應語句。

switch。。case不使用break原理理解

可以理解為switch中存在一個boolean型別變數預設為false,只有當值匹配時才會將其設定為true,之後按照順序執行進行相下判斷,當執行到程式碼塊時,獲取這個變數,如果變數值為true則執行當前程式碼塊

執行流程

首先計算出表示式的值
其次,和case依次比較,一旦有對應的值,就會執行相應的語句,在執行的過程中,遇到break就會結束。
最後,如果所有的case都和表示式的值不匹配,就會執行default語句體部分,然後程式結束掉。
在這裡插入圖片描述

注意事項

case後面只能是常量,不能是變數,而且,多個case後面的值不能出現相同的
default可以省略嗎?
可以省略。一般不建議。除非判斷的值是固定的。(單選題)
break可以省略嗎?
可以省略,一般不建議。否則結果可能不是你想要的
default的位置一定要在最後嗎?
可以出現在switch語句任意位置。
switch語句的結束條件
遇到break
執行到程式的末尾

使用場景

if…else與switch…case

當進行範圍判斷時使用if…else 當進行值匹配判斷時使用switch…case(根據判斷值個數決定)

實際上在程式開發中if…else使用最多,因為if…else也可以判斷值匹配,所有的switch case都可以使用if。。else的形式進行書寫,但有時實現相應功能沒有switch…case方便

迴圈流程控制語句

在滿足一定條件的情況下,重複的執行一段相同的程式碼

進行判斷的條件語句稱之為迴圈條件(當迴圈條件返回true時執行迴圈,但一般在程式執行時會對迴圈條件進行更改,使其在某一時刻返回false以達到終止迴圈的操作,否則會造成死迴圈)

重複執行的程式碼稱之為迴圈體語句

迴圈語句的組成

初始化語句:
一條或者多條語句,這些語句完成一些初始化操作。
判斷條件語句:
這是一個boolean 表示式,這個表示式迴圈體。能決定是否執行
迴圈體語句:
這個部分是迴圈體語句,也就是我們要多次做的事情。
控制條件語句:
這個部分在一次迴圈體語句結束後,下一次迴圈判斷條件執行前執行。通過用於控制迴圈條件中的變數,使得迴圈在合適的時候結束。

while 迴圈

語法:

初始化表示式(宣告變數並進行初始化賦值)

while(布林表示式(使用初始化的變數進行條件判斷)){

迴圈體語句

迭代語句(迴圈控制語句用於修改變數)

}

使用while迴圈輸出5次helloworld!

		int i=1;
		while(i<=100){
			System.out.println("hello kitty!"+i);
			i++;
		}

在這裡插入圖片描述

do…while迴圈

語法:

初始化語句;

do{

迴圈語句

迭代語句

}while(迴圈條件);

使用do…while迴圈輸出5次helloworld!

	// 1.初始化語句
		int i = 1;
		// 2.迴圈體
		do {
			System.out.println("hello world"+i);
			// 3.迭代語句
			i++;
			// 4.迴圈條件
		} while (i <= 5);

在這裡插入圖片描述

while迴圈與do…while迴圈的區別

1.語法上的區別

2.執行流程上的區別

while迴圈先判斷後迴圈,do…while先執行迴圈體語句之後再進行判斷

3.迴圈語句執行次數的區別

do…while迴圈語句至少執行一次

for迴圈

語法:

for(初始化語句1;條件判斷語句2;迭代語句3){

迴圈體;4

}

執行流程與while迴圈一致:1243243243

for迴圈可以理解為while迴圈已知次數迴圈的簡化

for(int i=1;i<=5;i++){
	System.out.println(i);
}

for迴圈與while迴圈的區別

1.語法上的區別

2.變數作用域不同

while迴圈的初始化語句宣告在while迴圈外,除本迴圈外其他語句也可以使用,for迴圈變數宣告在迴圈內,只有當前迴圈可以使用,迴圈結束後會被銷燬

3.變數命名重複

while迴圈由於初始化語句宣告在while迴圈為,所以作用域同樣在while迴圈外,同一作用域不允許變數重名,

for迴圈變數多個迴圈間可以宣告相同的變數使用

4.使用場景不同

while用於未知次數的迴圈

for用於已知次數的迴圈

迴圈跳轉語句(迴圈控制語句)

迴圈控制語句用於在迴圈中控制迴圈的終止以及跳轉,與迭代語句不同的是,控制語句可以在任意時間停止迴圈

break:

終止當前程式碼塊後續程式碼(結束當前迴圈)

		// break結束當前迴圈
		// for(int i=1;i<=100;i++){
		// if(i==51){
		// break;//結束當前迴圈
		// }
		// System.out.println(i);
		// }
		int i = 1;
		while (true) {
			if(i>50){
				break;
			}
			System.out.println(i);
			i++;
		}

continue:

跳過本次迴圈進入下次迴圈

跳過continue後的本次迴圈程式碼

		// continue跳過本次迴圈
		for (int i = 1; i < 100; i++) {
			if(i%2==0){
				continue;
			}
			System.out.println(i);
		}

return:

方法級別的結束,會直接結束當前方法

	// return結束當前方法
		for (int i = 1; i < 100; i++) {
			if(i%2==0){
				return;
			}
			System.out.println(i);
		}
		System.out.println("迴圈結束後執行");

continue:結束當前迴圈語句之後的程式碼進入下一次迴圈

break:結束當前迴圈

return:結束當前方法
書寫程式碼完成功能:

1.控制檯輸入年份,月份,輸出指定年份指定月份的天數

	// 1.控制檯輸入年份,月份,輸出指定年份指定月份的天數
		// 1、控制檯輸入=>建立Scanner掃描器物件
		Scanner sc = new Scanner(System.in);
		// 2、輸入年份,月份=>使用掃描器物件獲取控制檯輸入的資料並分別建立變數儲存
		System.out.println("請輸入年份:");
		int year = sc.nextInt();
		System.out.println("請輸入月份:");
		int month = sc.nextInt();
		// 3、輸出月份天數
		// (1)首先判斷年份是否為閏年=>判斷年變數儲存資料是否能被4整除得出2月天數
		// (2)判斷月變數是否為2月後其他月份=>2月根據年份輸出 135781012=31天 46911=30天
		// 思路1:使用if。。else完成
		/*
		 * if(month==2){ if(year%4==0){
		 * System.out.println(year+"年"+month+"月有29天"); }else{
		 * System.out.println(year+"年"+month+"月有28天"); } }else
		 * if(month==1||month==3||month==5||month==7||month==8||month==10||month
		 * ==12){ System.out.println(year+"年"+month+"月有31天"); }else
		 * if(month==4||month==6||month==9||month==11){
		 * System.out.println(year+"年"+month+"月有30天"); }
		 */

		// 思路2:使用witch..case完成
		// 思路3:組合使用
		// 額外宣告變數day保持實際天數
		int day = 0;
		// 判斷年份為day賦值
		if (year % 4 == 0) {
			day = 29;
		} else {
			day = 28;
		}
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			day=31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			day=30;
			break;
		}
		System.out.println(year + "年" + month + "月有" + day + "天");

2.控制檯輸入年份,輸入月份,輸入日期,輸出指定年份指定日期已過天數

	// 2.控制檯輸入年份,輸入月份,輸入日期,輸出指定年份指定日期已過天數
		// 1.控制檯輸入=>建立Scanner掃描器物件
		Scanner sc = new Scanner(System.in);
		// 2.輸入年份,月份,日期=>使用掃描器物件獲取控制檯輸入的資料並分別建立變數儲存
		System.out.println("請輸入年份:");
		int year = sc.nextInt();
		System.out.println("請輸入月份:");
		int month = sc.nextInt();
		System.out.println("請輸入日期:");
		int day = sc.nextInt();
		// 3.判斷年份2月天數並使用變數儲存
		int twoMonthDay = 0;
		if (year % 4 == 0) {
			twoMonthDay = 29;
		} else {
			twoMonthDay = 28;
		}
		// 4.宣告變數儲存總天數
		int sumDay = 0;

		// 5.進行天數的相加
		switch (month) {
		case 5:
			sumDay=sumDay+30;//四月
		case 4:
			sumDay+=31;//三月
		case 3:
			sumDay+=twoMonthDay;//二月
		case 2:
			sumDay+=31;//一月
		case 1:
			sumDay += day;
			
		}
		System.out.println("已過天數:" + sumDay);

相關文章