1. 程式人生 > >新手初入Java(三)程式流程和程式的除錯

新手初入Java(三)程式流程和程式的除錯

(一)程式流程

Java程式語句執行的順序包括4種基本控制結構:順序結構、選擇結構、迴圈結構和異常處理邏輯結構。

1、順序結構

在Java程式中,語句執行的基本順序按各語句出現的位置先後順序執行,稱之為順序結構,如圖所示,先執行語句塊1,在執行語句塊2,最後執行語句塊3,三者是順序執行關係。
順序結構

2、選擇結構

(1)if語句
if條件語句包含多種形式,單分支,雙分支和多分支,其流程如下:

  • 單分支
    語法形式如下:
if(條件表示式)
	語句/語句塊;

單分支

  • 雙分支
    語法形式如下:
if(條件表示式)
	語句/語句塊1;
else
	語句/語句塊2;	

雙分支

  • 多分支
    語法形式如下:
if(條件表示式1)
	語句/語句塊1;
else if(條件表示式2)
	語句/語句塊2;
	...
	...
	...
else if(條件表示式n)
	語句/語句塊n;
	else
	語句/語句塊n+1;]		

多分支
(2)switch語句

對於多重分支,雖然可以使用巢狀的if語句實現,但是如果分支較多,程式可讀性較差,此時可利用switch語句。switch語句是抑惡個控制語句,它通過將控制傳遞給其體內的case語句來處理多個選擇和列舉。

switch語句的語法如下:

	switch(控制表示式){
	case(常量表達式)1:
		語句序列1;
		break;
	case 常量表達式2:
		語句序列2;
		break;
		...
		...
	case 常量表達式n:
		語句序列n;
		break;
	default:
		語句序列n+1;
		break;
}

說明:
(1)switch語句基於控制表示式的值選擇要執行的語句分支。switch語句按以下順序執行。

  • 控制表示式求值。
  • 如果case標籤後的常量表達式的值恰好等於控制表示式的值,控制將轉到匹配的case標籤後的語句序列。
  • 如果case標籤後的常量表達式的值不等於控制表示式的值,且存在一個default標籤,則控制將轉到default標籤後的語句序列。
  • 如果case標籤後的常量表達式的值不等於控制表示式的值,且不存在一個default標籤,則控制將跳出switch語句執行後繼語句。

(2)控制表示式所允許的資料型別:整數型別(byte、short、int)、字元型別(char)或者列舉型別,即只能為可隱式轉換為int的型別和列舉型別。case標籤後的常量表達式只能為常數或常量,不能為變數。
(3)每一個case標籤後的常量表達式的值都不能相同,其中值相同的不同常量。
(4)各個case子句出現的次序不影響語句的執行結果。
(5)一個switch語句最多隻能有一個default標籤。雖然switch結構中的case可以按任意順序放置,但是一般建議將default放在最後。
(6)和if-else語句不同的是,在執行一個case子句後面的語句序列後,switch語句並不會終止,要退出switch語句,必須使用一個跳轉語句。一般情況下,跳轉語句是break,當到達的break語句時,結束switch語句的執行。
示例如下:

public static void Switch(char n)
    {
        System.out.println("請輸入A,B,C,D,E:");
        switch(n)
        {
            case 'A':
                System.out.println("90--100");
                break;
            case 'B':
                System.out.println("80--90");
                break;
            case'C':
                System.out.println("70--80");
                break;
            case'D':
                System.out.println("60--70");
                break;
            case'E':
                System.out.println("60分以下");
                break;
            default:
                System.out.println("輸入錯誤!");
                break;
        }
}

3、迴圈結構

(1)for迴圈
for迴圈語句時記數型迴圈語句,一般用於已知迴圈次數的情況,所以也稱為定次迴圈。

基本語法如下:

for(初始化設定表示式;迴圈執行條件;迴圈變數的增減量){
	迴圈語句序列;
}

執行順序為:初始化設定表示式–>迴圈執行條件–>迴圈語句序列–>迴圈變數的增減量
注意: 迴圈變數的增減量可以寫在迴圈語句序列中。
for迴圈只作用於for(初始化設定表示式;迴圈執行條件;迴圈變數的增減量) 後面的大括號的範圍內。
(2)while迴圈

與for迴圈一樣,while也是一個預測試的迴圈,但是while在迴圈開始前,並不知道重複執行迴圈語句序列的次數。while語句按不同條件執行迴圈語句序列零次或多次。
while語句的格式:

while(條件表示式){
	迴圈語句序列;
	}

說明:
1)while迴圈語句的執行過程如下。

  • 計算條件表示式
  • 如果條件表示式結果為true,控制將轉到迴圈體語句序列(進入迴圈體)。當到達迴圈體語句序列的結束點時轉計算條件表示式,即控制轉到while語句的開始,繼續迴圈。
  • 如果條件表示式結果為false,退出while迴圈,即控制轉到while迴圈語句的後繼語句。

while迴圈的執行流程圖如圖:
while迴圈的執行流程

2)條件表示式是每次進入迴圈之前進行判斷的條件,可以為關係表示式或邏輯表示式,其運算結果為true(真)或false(假)。條件表示式中必須包含控制迴圈的變數。
3)迴圈語句序列可以是一條語句,也可以是多條語句。當語句序列中僅含有一條語句是,花括號可以省略。
4)迴圈語句序列中至少應包含改變迴圈條件的語句,以使迴圈趨於結束,避免“死迴圈”。

程式碼示例如下:

public static void main(String[] args) {
        int i=1,sum=0;
        while(sum<=3000){
            sum+=i;
            i++;
        }
        System.out.println("求1+2+3+4+……的和,直至和大於3000為止,結果為"+sum);
}

(3)do while迴圈

do語句按不同型別執行一次或多次迴圈語句序列。do while迴圈式while迴圈的後測試版本。該迴圈的測試條件在執行完迴圈體之後執行。而while迴圈的的測試條件在執行迴圈體之前執行。因此,do while迴圈的迴圈體至少執行一次,而while迴圈的迴圈體可能一次也不執行。

do while迴圈語句的格式如下:

do{
	迴圈體語句序列;
}while(條件表示式);

do while迴圈語句的執行流程如下:
當執行到do語句時,立即進入迴圈體執行迴圈體語句序列,然後測試條件表示式。如果條件表示式的結果為true,則返回do語句繼續執行;否則退出迴圈,執行while語句的後繼語句。do while迴圈的執行流程如下圖:
do while迴圈語句流程圖

程式碼示例如下:

    public static void main(String[] args) {
        int i=1,sum=0;
       do{
            sum+=i;
            i++;
        } while(sum<=3000);
        System.out.println("求1+2+3+4+……的和,直至和大於3000為止,結果為"+sum);
}

4、跳轉語句

(1)break語句
不帶標籤的break語句,在多分支選擇結構中的作用時跳出迴圈,執行後繼語句。可以用於退出for、for each、while和do while迴圈。
帶標籤的break語句用於跳出有標籤標記的語句/語句塊。
(2)continue語句
不帶標籤的continue語句,也可以用於退出for、for each、while和do while迴圈。但它是結束本次迴圈,然後根據迴圈條件判斷是否執行下一次迴圈。帶標籤的continue語句和帶標籤的break語句相類似,用於結束本次迴圈,並跳轉到由標籤標記的外層迴圈。
(3)return語句
return語句用於終止方法的執行並將控制返回給呼叫方法。如果有返回型別,return語句必須返回這個型別的值。如果方法為void型,應使用沒有表示式的return語句;如果方法為void型別,方法體最後的return語句可以省略。

5、程式的除錯

(1)打斷點:在程式碼行左邊欄點選滑鼠左鍵,出現紅色圓圈。然後點選右上的甲殼蟲。
(2)讓它一步一步執行:點擊向下的藍色箭頭。如下圖中的:

除錯
(3)結束時點選右上角的停止按鈕,再次點選紅色圓圈,結束除錯。