在 Java 中使用 switch 語句時,需要遵循哪些規則?


switch 語句允許將一個變數與其值列表進行比較。每個值稱為一個 case,並且會針對每個 case 檢查正在切換的變數。

語法

switch(expression) {
   case value :
      // Statements
      break;
   case value :
      // Statements
      break;
      // You can have any number of case statements.
   default :
      // Statements
}

需要遵循的規則

在使用 switch 語句時,請記住以下幾點:

  • 我們只能在 switch 中使用 int、char 或 enum 型別。使用任何其他型別都會導致編譯時錯誤。

示例

import java.util.Scanner;
public class SwitchExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter percentage: ");
      float percent = sc.nextFloat();
      switch (percent) {
         case (percent>=80):
            System.out.println("A Grade");
            break;
         case (percent<80):
            System.out.println("Not A Grade");
            break;
      }
   }
}

編譯時錯誤

SwitchExample.java:7: error: incompatible types: possible lossy conversion from float to int
   switch (percent) {
^
SwitchExample.java:8: error: constant expression required
   case (percent>=80):
^
SwitchExample.java:11: error: constant expression required
case (percent<80):
^
3 errors

如果您在 Eclipse 中編譯上述程式,則會顯示如下所示的訊息:

switch case 中的所有語句都會一直執行,直到遇到 break 語句。因此,您需要在每個 case 後新增 break,否則所有 case 都會被執行,而不管您選擇了哪個選項。

示例

 線上演示

import java.util.Scanner;
public class SwitchExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Available models: Activa125(act125), Activa5G(act5g)," + " Accesses125(acc125), Vespa(ves), TvsJupiter(jup)");
      System.out.println("Select one model: ");
      String model = sc.next();
      switch (model) {
         case "act125":
            System.out.println("The price of activa125 is 80000");
            //break;
         case "act5g":
            System.out.println("The price of activa5G is 75000");
            //break;
         case "acc125":
            System.out.println("The price of access125 is 70000");
            //break;
         case "ves125":
            System.out.println("The price of vespa is 90000");
            //break;
         case "jup":
            System.out.println("The price of tvsjupiter is 73000");
            //break;
         default:
            System.out.println("Model not found");
            break;
      }
   }
}

輸出

Available models: Activa125(act125), Activa5G(act5g), Accesses125(acc125), Vespa(ves), TvsJupiter(jup)
Select one model:
act125
The price of activa125 is 80000
The price of activa5G is 75000
The price of access125 is 70000
The price of vespa is 90000
The price of tvsjupiter is 73000
Model not found

我們在 switch 語句中使用的表示式必須是常量,如果我們使用其他表示式,則會生成編譯時錯誤。

示例

import java.util.Scanner;
public class SwitchExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      String str[] = {"act125", "act5g", "acc125"};
      System.out.println("Available models: Activa125(act125), Activa5G(act5g), Accesses125(acc125)");
      System.out.println("Select one model: ");
      String model = sc.next();
      switch (model) {
         case str[0]:
            System.out.println("The price of activa125 is 80000");
            break;
         case str[1]:
            System.out.println("The price of activa5G is 75000");
            break;
         case str[2]:
            System.out.println("The price of access125 is 70000");
            break;
      }
   }
}

輸出

SwitchExample.java:10: error: constant string expression required
   case str[0]:
           ^
SwitchExample.java:13: error: constant string expression required
   case str[1]:
           ^
SwitchExample.java:16: error: constant string expression required
    case str[2]:
            ^
3 errors

兩個 case 不能具有相同的值。如果這樣做了,將生成編譯時錯誤。

示例

import java.util.Scanner;
public class SwitchExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      String str[] = {"act125", "act5g", "acc125"};
      System.out.println("Available models: Activa125(act125), Activa5G(act5g), Accesses125(acc125)");
      System.out.println("Select one model: ");
      String model = sc.next();
      switch (model) {
         case "act125":
            System.out.println("The price of activa125 is 80000");
            break;
         case "act125":
            System.out.println("The price of activa5G is 75000");
            break;
         case "acc125":
            System.out.println("The price of access125 is 70000");
            break;
      }
   }
}

編譯時錯誤

SwitchExample.java:13: error: duplicate case label
   case "act125":
   ^
1 error

您可以在任何位置放置 default 語句,並且 case 上面的語句永遠不會被執行。

更新於:2019年7月30日

2K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.