在 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+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告