天天看點

Java Review (四、流程控制)塊作用域順序結構分支結構循環結構中斷控制

文章目錄

不論哪一種程式設計語言,都會提供兩種基本的流程控制結構:分支結構和循環結構。其中分支結構用 于實作根據條件來選擇性地執行某段代碼,循環結構則用于實作根據循環條件重複執行某段代碼。Java 同樣提供了這兩種流程控制結構的文法,Java提供了 if和switch兩種分支語句,并提供了 while、do while 和for三種循環語句。除此之外,JDK5還提供了一種新的循環:foreach循環,能以更簡單的方式來遍 曆集合、數組的元素。Java還提供了 break和continue來控制程式的循環結構。

塊(即複合語句)是指由一對大括号括起來的若幹條簡單的 Java 語句。塊确定了變量的作用域。一個塊可以嵌套在另一個塊中。

public static void main(String口 args) {
//mian方法塊
int n; {
//嵌套一個塊
int k; 
 }
}      

任何程式設計語言中最常見的程式結構就是順序結構。順序結構就是程式從上到下逐行地執行,中間沒 有任何判斷和跳轉。

如果main方法的多行代碼之間沒有任何流程控制,則程式總是從上向下依次執行,排在前面的代 碼先執行,排在後面的代碼後執行。這意味着:如果沒有流程控制,Java方法裡的語句是一個順序執行 流,從上向下依次執行每條語句。

if 語句的文法:

if(布爾表達式)
{
   //如果布爾表達式為true将執行的語句
}
      

if…else語句

if 語句後面可以跟 else 語句,當 if 語句的布爾表達式值為 false 時,else 語句塊會被執行:

if(布爾表達式){
   //如果布爾表達式的值為true,執行此代碼塊
}else{
   //如果布爾表達式的值為false,執行此代碼塊
}
      

if…else if…else 語句

if 語句後面可以跟 else if…else 語句,這種語句可以檢測到多種可能的情況。

使用 if,else if,else 語句的時候,需要注意下面幾點:

  • if 語句至多有 1 個 else 語句,else 語句在所有的 else if 語句之後。
  • if 語句可以有若幹個 else if 語句,它們必須在 else 語句之前。
  • 一旦其中一個 else if 語句檢測為 true,其他的 else if 以及 else 語句都将跳過執行。
if(布爾表達式 1){
   //如果布爾表達式 1的值為true執行代碼
}else if(布爾表達式 2){
   //如果布爾表達式 2的值為true執行代碼
}else if(布爾表達式 3){
   //如果布爾表達式 3的值為true執行代碼
}else {
   //如果以上布爾表達式都不為true執行代碼
}
      

可以在一個if……else代碼塊中嵌套另一個if……else代碼塊:

if(布爾表達式 1){
   如果布爾表達式 1的值為true執行代碼
   if(布爾表達式 2){
      如果布爾表達式 2的值為true執行代碼
   }
}else{
  
}
      

switch語句由一個控制表達式和多個case标簽組。

switch(expression){
    case value :
       //語句
       break; //可選
    case value :
       //語句
       break; //可選
    //你可以有任意數量的case語句
    default : //可選
       //語句
}
      

switch分支語句規則:

  • switch 語句中的變量類型可以是: byte、short、int 或者 char。從 Java SE 7 開始,switch 支援字元串 String 類型了,同時 case 标簽必須為字元串常量或字面量。
  • switch 語句可以擁有多個 case 語句。每個 case 後面跟一個要比較的值和冒号。
  • case 語句中的值的資料類型必須與變量的資料類型相同,而且隻能是常量或者字面常量。
  • 當變量的值與 case 語句的值相等時,那麼 case 語句之後的語句開始執行,直到 break 語句出現才會跳出 switch 語句。
  • 當遇到 break 語句時,switch 語句終止。程式跳轉到 switch 語句後面的語句執行。case 語句不必須要包含 break 語句。如果沒有 break 語句出現,程式會繼續執行下一條 case 語句,直到出現 break 語句。
  • switch 語句可以包含一個 default 分支,該分支一般是 switch 語句的最後一個分支(可以在任何位置,但建議在最後一個)。default 在沒有 case 語句的值和變量值相等的時候執行。default 分支不需要 break 語句。

執行個體

public class Test {
   public static void main(String args[]){
      //char grade = args[0].charAt(0);
      char grade = 'C';
 
      switch(grade)
      {
         case 'A' :
            System.out.println("優秀"); 
            break;
         case 'B' :
         case 'C' :
            System.out.println("良好");
            break;
         case 'D' :
            System.out.println("及格");
            break;
         case 'F' :
            System.out.println("你需要再努力努力");
            break;
         default :
            System.out.println("未知等級");
      }
      System.out.println("你的等級是 " + grade);
   }
}
      

運作結果:

良好
你的等級是 C      

循環語句可以在滿足循環條件的情況下,反複執行某一段代碼,這段被重複執行的代碼被稱為循環 體。當反複執行這個循環體時,需要在合适的時候把循環條件改為假,進而結束循環,否則循環将一直 執行下去,形成死循環。

while( 布爾表達式 ) {
  //布爾表達式為 true,循環就會一直執行下去
}
      

對于 while 語句而言,如果不滿足條件,則不能進入循環。但有時候我們需要即使不滿足條件,也至少執行一次。

do…while 循環和 while 循環相似,不同的是,do…while 循環至少會執行一次。

do {
       //代碼語句
}while(布爾表達式);      

布爾表達式在循環體的後面,是以語句塊在檢測布爾表達式之前已經執行了。 如果布爾表達式的值為 true,則語句塊一直執行,直到布爾表達式的值為 false。

雖然所有循環結構都可以用 while 或者 do…while表示,但 Java 提供了另一種語句 —— for 循環,使一些循環結構變得更加簡單。

for循環執行的次數是在執行前就确定的。文法格式如下:

for(初始化; 布爾表達式; 更新) {
    //代碼語句
}
      

文法說明:

  • 最先執行初始化步驟。可以聲明一種類型,但可初始化一個或多個循環控制變量,也可以是空語句。
  • 然後,檢測布爾表達式的值。如果為 true,循環體被執行。如果為false,循環終止,開始執行循環體後面的語句。
  • 執行一次循環後,更新循環控制變量。
  • 再次檢測布爾表達式。循環執行上面的過程。
  • 循環圓括号中隻有兩個分号是必需的,初始化語句、循環條件、疊代語句部分都是可以省略的, 如果省略了循環條件,則這個循環條件預設為true,将會産生一個死循環。
public class Test {
   public static void main(String args[]) {
      //從10輸出到19
      for(int x = 10; x < 20; x = x++) {
         System.out.print("value of x : " + x );
         System.out.print("\n");
      }
   }
}
      

Java5 引入了一種主要用于數組的增強型 for 循環。

Java 增強 for 循環文法格式如下:

for(聲明語句 : 表達式)
{
   //代碼句子
}
      
  • 聲明語句:聲明新的局部變量,該變量的類型必須和數組元素的類型比對。其作用域限定在循環語句塊,其值與此時數組元素的值相等。
  • 表達式:表達式是要通路的數組名,或者是傳回值為數組的方法。
public class Test {
   public static void main(String args[]){
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ){
         System.out.print( x );
         System.out.print(",");
      }
      System.out.print("\n");
      String [] names ={"James", "Larry", "Tom", "Lacy"};
      //周遊輸出數組
      for( String name : names ) {
         System.out.print( name );
         System.out.print(",");
      }
   }
}
      

如果把一個循環放在另一個循環體内,那麼 就可以形成嵌套循環。

執行個體

public class DiamondTest {
    //循環輸出菱形
    public static void main(String[] args) {
        int row=6;                  //行數
        if (row >= 1){
            int x,y;
            //輸出上半部分正三角形
            for(x = 1; x <= row; x++){
                for (y = 1; y <= row - x;y++) {
                    System.out.print(" ");
                }
                for (y = 1; y <= 2 * x - 1;y++) { 
                    System.out.print("*");
                }   
                System.out.println();
            }
            //輸出下半部分正三角形
            for(x = 1; x <= row; x++){
                for (y = 1; y <=  x;y++) {
                    System.out.print(" ");
                }
                for (y = 1; y <= 2 *(row- x) - 1;y++) { 
                    System.out.print("*");
                }   
                System.out.println();
            }
            
        }

    }      

結果:

*
    ***
   *****
  *******
 *********
***********
 *********
  *******
   *****
    ***
     *      

break 主要用在循環語句或者 switch 語句中,用來跳出整個語句塊。

public class Test {
   public static void main(String args[]) {
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ) {
         // x 等于 30 時跳出循環
         if( x == 30 ) {
            break;
         }
         System.out.print( x );
         System.out.print("\n");
      }
   }
}
      

continue的功能和break有點類似,差別是continue是忽略本次循環剩下語句,接着開始下一次 循環,并不會終止循環;而break則是完全終止循環本身。

public class WaterTest {
   /**
        * 現在用一個鍋爐燒熱水,假設鍋爐的容量為100,當流出的水量超過100時, 
        * 就進行加 熱,直到水開再流開水。
    * @param args
    */
    public static void main(String[] args) {
        boolean isBoil = true;
        int i = 0;
        while (true) {
            if (!isBoil) {
                continue;
            }
            i++;
            if (i < 100) {
                i++;
                System.out.println("開水");
            } else {
                isBoil = false;
            }
        }
    }
    
}         

return關鍵字并不是專門用于結束循環的,return的功能是結束一個方法。當一個,這 個方法将被結束。

public class ReturnTest
(
public static void main(String[] args){
    // 一個簡單的for循環 
    for (int i = 0; i < 3 ; i++ ) {
      System, out .print丄n ("i 的值是"+ i);
      if (i == 1){
       return;
      }  
   System.out .printIn ("return 後的輸岀語句");
 }
}      

參考:

【1】:《瘋狂Java講義》

【2】:《Java核心技術 卷一》

【3】:

https://www.runoob.com/java/java-if-else-switch.html