java使用Switch语句来控制程序的流程

switch语句是 Java 语言中可用的五个控制流语句之一。它允许任意数量的执行路径。语句将switch选择器变量作为参数,并使用该变量的值来选择将要执行的路径。

您必须在以下类型中选择选择器变量的类型:

  • byte, short, char, 和int原始数据类型
  • Character, Byte, Short, 和Integer包装类型
  • 枚举类型
  • String类型。

值得注意的是,以下原始类型不能用于选择器变量的类型:boolean、long、float和double。

让我们看一个switch语句的第一个例子。

int quarter = ...; // any value

String quarterLabel = null;
switch (quarter) {
    case 0: quarterLabel = "Q1 - Winter"; 
            break;
    case 1: quarterLabel = "Q2 - Spring"; 
            break;
    case 2: quarterLabel = "Q3 - Summer"; 
            break;
    case 3: quarterLabel = "Q3 - Summer"; 
            break;
    default: quarterLabel = "Unknown quarter";
};

语句的主体switch称为switch块。块中的语句switch可以用一个或多个case或default标签来标记。该switch语句计算其表达式,然后执行匹配case标签后面的所有语句。

您可能已经注意到break关键字的使用。每个break语句都终止封闭switch语句。switch控制流从块后面的第一条语句继续。这些break语句是必要的,因为没有它们,switch块中的语句就会失败。匹配case标签之后的所有语句都按顺序执行,无论后续case标签的表达式如何,直到break遇到一条语句。

以下代码使用 fall through 填充futureMonths列表。

int month = 8;
List<String> futureMonths = new ArrayList<>();

switch (month) {
    case 1:  futureMonths.add("January");
    case 2:  futureMonths.add("February");
    case 3:  futureMonths.add("March");
    case 4:  futureMonths.add("April");
    case 5:  futureMonths.add("May");
    case 6:  futureMonths.add("June");
    case 7:  futureMonths.add("July");
    case 8:  futureMonths.add("August");
    case 9:  futureMonths.add("September");
    case 10: futureMonths.add("October");
    case 11: futureMonths.add("November");
    case 12: futureMonths.add("December");
             break;
    default: break;
}

从技术上讲,finalbreak不是必需的,因为 flow 不在switch语句中。建议使用 abreak以便修改代码更容易且不易出错。

该default部分处理其中一个部分未明确处理的所有值case。

以下代码示例显示了一条语句如何具有多个case标签。代码示例计算特定月份的天数:

int month = 2;
int year = 2021;
int numDays = 0;

switch (month) {
    case 1: case 3: case 5:   // January March May
    case 7: case 8: case 10:  // July August October
    case 12:
        numDays = 31;
        break;
    case 4: case 6:   // April June
    case 9: case 11:  // September November
        numDays = 30;
        break;
    case 2: // February
        if (((year % 4 == 0) && 
             !(year % 100 == 0))
             || (year % 400 == 0))
            numDays = 29;
        else
            numDays = 28;
        break;
    default:
        System.out.println("Invalid month.");
        break;
}

这段代码有一个多于一个的语句case。

java使用Switch语句来控制程序的流程

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注