1. 程式人生 > >Java程式結構、if-else和switch條件選擇、for與while與do-while迴圈及beak和continue控制跳轉語句

Java程式結構、if-else和switch條件選擇、for與while與do-while迴圈及beak和continue控制跳轉語句

Java程式的流程控制

Java流程控制提供了控制程式的基本手段,使得程式能夠按照正確的順序逐步執行,以實現特定的功能。Java流程控制結構分為:順序結構、選擇結構、迴圈結構。

  1. 順序結構
    Java應用程式都是從main()方法開始執行的。程式一般是按照書寫順序依次向下執行,直到main()方法結束,整個程式執行結束。這種程式稱為順序結構的程式。
  2. 選擇結構
  • 單分支if(){}語句
	if (<結果為boolean型別的條件表示式或者boolean常量>) {
		<語句一>;
	}

當()中的結果為true時,執行語句一,否則不執行語句一,進而執行}後的內容。
當{}內為一條語句時,可以不寫{}(建議寫上{}便於理解)。{}內也可以是多條語句。

  • 雙分支if(){}else{}語句
	if (<結果為boolean型別的條件表示式或者boolean常量>) {
		<語句一>;
	} else {
		<語句二>;
	}

這種雙分支語句是一種“二選一”的分支結構,當()中boolean型別的值為true時,執行語句一,否則執行語句二。
{}內可以是一條語句也可以是多條語句。
else字句不能單獨作為語句使用,必須與if配對使用。

  • 多分支if(){}else if(){}結構
	if (<條件一>) {
		<語句一>;
	} else if(<條件二>) {
		<語句二>;
	} else {
		<語句三>;
	}

從上往下,當存在某一個條件為true時,執行該條件下{}中的語句,多分支結構執行完成。
當第一個條件為false時,繼續向下依次判斷,直到有一個條件為true,執行該條件下{}的語句並結束if選擇結構,否則執行最後一個沒有if判斷條件中的{}(假如沒有最後一個esle(){}則直接結束該分支迴圈結構)。

  • switch(){}語句
	switch (<型別為int、Strings、enum的常量或者變數>) {
		case <常量一>:
			<語句一>;
			break;
		case <常量二>;
			<語句二>;
			break;
		default:
			<語句三>;
			break;
	}

()中的值依次與case後的常量一一匹配,直到有一個常量等於()中的值,執行該case下的語句。遇到break後結束switch語句。
switch語句中()內只能是int、Strings、enum的常量或者變數。
所有case後的常量型別必須和()中的型別完全一致。
在每個case後只能是常量:

{}內的部分是switch的語句體。case字句只是起到一個標記作用,來查詢匹配的入口,所以case後的常量不允許重複。
break語句用來再執行完一個case分支後,是程式跳出switch語句。
執行語句後用break來終止switch語句。否則會發生switch穿透(當()內的值等於case後的值時,一直向下執行其他case後的語句,直到遇到break;switch語句結束)。
default:語句用於當沒有任何一個case後的變數和()內的結果匹配時,直接執行default後的語句。default語句建議放在最後一行,提高語義性。
3. 迴圈結構
迴圈結構用來處理需要重複處理的問題。使用迴圈結構來提高效率。
迴圈結構大致分為以下過程:初始化過程(設定迴圈條件)、判斷是否繼續迴圈(型別為boolean的條件表示式或者boolean常量(需要迴圈體中合適情況下break))、迴圈體(迴圈執行的程式碼段)、迭代部分(通常屬於迴圈體的一部分,用來改變迴圈控制便變數的值)。

  • for(){}迴圈
    for迴圈式最標準的迴圈語句,其結構清晰,易於理解。
	for (<初始化部分>; <型別為boolean的條件表示式或者boolean常量所組成的迴圈條件>; <迭代部分>) {
		<語句一>;
	}

首先執行初始化,然後判斷迴圈條件,其值為true時,執行迴圈體後繼續判斷迴圈條件,直到迴圈條件為false結束迴圈。
初始化 -> 判斷條件的值為true時 -> 執行迴圈體 -> 判斷條件 -> …… -> 判斷條件的值為false時結束迴圈
建議:迴圈體內儘量不要用new例項

  • while(){}迴圈
	<初始化部分>;
	while (<型別為boolean的條件表示式或者boolean常量>) {
		<迴圈語句>;
	}

初始化過程可選部分,為迴圈提供需要的某些變數並賦初始值。
當()內的值為true時,執行迴圈體({}內的部分統稱為迴圈體),其中執行了迭代部分,再判斷()內的值是否為true,繼續迴圈,直到()內的值為false,結束迴圈。
初始化 -> 判斷條件的值為true時 -> 執行迴圈體 -> 判斷條件 -> …… -> 判斷條件的值為false時結束迴圈
結束方式也可以時,在適當條件下使用break;語句來結束迴圈。

  • do{}while()迴圈
	<初始化部分>;
	do {
		<迴圈語句>;
	} while (<型別為boolean的條件表示式或者boolean常量>);

do-while迴圈先執行依次迴圈體內的部分,再判斷條件表示式的值,其值為true時繼續迴圈,再判斷迴圈條件,當迴圈條件為false時,終止迴圈。
初始化 -> 執行迴圈體 -> 判斷條件的值為true時 -> 執行迴圈體 -> 判斷條件 -> …… -> 判斷條件的值為false時結束迴圈

  • 多重迴圈
    迴圈結構語句的迴圈體內可以是一條或者多條基本語句,也可以是包括迴圈結構在內的控制語句。迴圈巢狀的執行過程可以按照以上邏輯進行分析。
    一般規則是:先執行一次外層迴圈,在進入內層迴圈,當內層迴圈結束後,轉而執行外層的第二次迴圈……直到兩者迴圈結束 。(兩層迴圈)
  • 流程跳轉語句
    break、continue、return關鍵字所組成的語句。
  • break語句
    使用於迴圈語句和switch語句中,作用是結束本層迴圈(對於單層迴圈來說就是結束迴圈)。

Java中每塊程式碼塊({}內的內容)都可以加一個標號label。加標號的格式如下

	BlockLabel:{codeBlock}

break語句格式如下

break[label];

break語句中label是可選部分。如果沒有label部分,break只是退出一層程式碼塊,也就是退出一對{}的範圍。如果有label部分,break就是指跳出它所指定的程式碼塊,並從緊接著該塊的第一條語句出開始執行。

public class Test {
	public static void main(String[] args) {
	    x:for (int i = 0; i < 3; i++) {
	    	System.out.println("i" + i);
	    	y:for (int j = 0; j < 3; j++) {
				System.out.println("j" + j);
				z:for (int k = 0; k < 3; k++) {
					System.out.println("k" + k);
					System.out.println(i + "\t" + j + "\t" + k);
				
					if (k == 2) {
						break y;
					}
				}
			}
		}
	}

}

含有標記的break只能在多層迴圈中使用,當執行到內層迴圈的break label時,結束label所標記的迴圈,也就是說執行到break;時,第二層迴圈結束,返回至第一層迴圈中,繼續執行,直到迴圈結束。輸出結果如下

i0
j0
k0
0	0	0
k1
0	0	1
k2
0	0	2
i1
j0
k0
1	0	0
k1
1	0	1
k2
1	0	2
i2
j0
k0
2	0	0
k1
2	0	1
k2
2	0	2
  • continue語句
continue [label];

單獨使用時是結束本層迴圈,跳過迴圈體中continue下面沒有執行的語句,直接進入條件判斷語句,來決定迴圈是否執行。

public class Test {
	public static void main(String[] args) {
	    x:for (int i = 0; i < 3; i++) {
	    	System.out.println("i" + i);
	    	y:for (int j = 0; j <= 3; j++) {
				System.out.println("j" + j);
				System.out.println(i + "\t" + j);
				if (j == 2) {
					continue x;
				}
			}
		}
	}

}

當continue後含有labe標記l時,程式跳轉到所標記迴圈的下下一次判斷條件,label所標記的地方可以用。也就是說在執行到continue時,跳轉到外層迴圈的條件判斷部分。結果如下

i0
j0
0	0
j1
0	1
j2
0	2
i1
j0
1	0
j1
1	1
j2
1	2
i2
j0
2	0
j1
2	1
j2
2	2

  • return語句
    結束本方法。跳轉到被上層呼叫方法。如果是某個方法的返回值型別不是void,則需要提供相應的返回值。