新手初入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迴圈的執行流程圖如圖:
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迴圈的執行流程如下圖:
程式碼示例如下:
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)結束時點選右上角的停止按鈕,再次點選紅色圓圈,結束除錯。