Case a:对一个switchcase语句使用两个值

关于Case a的问题,在case to case or case by case中经常遇到, 在我的代码中,程序根据用户输入的文本执行某些操作。

在我的代码中,程序根据用户输入的文本执行某些操作。

switch (name) {
        case text1: {
            //blah
            break;
        }
        case text2: {
            //blah
            break;
        }
        case text3: {
            //blah
            break;
        }
        case text4: {
            //blah
            break;
        }

但是,casestext1text4中的代码是相同的。因此,我想知道是否有可能实现类似

case text1||text4: {
            //blah
            break;
        }

我知道||运算符在 case 语句中不起作用,但是有类似的东西我可以使用。

760

您可以使用两个CASE语句,如下所示。

  case text1: 
  case text4:{
            //blah
            break;
        }

请参阅此示例:代码示例计算特定月份的天数:

class SwitchDemo {
    public static void main(String[] args) {
        int month = 2;
        int year = 2000;
        int numDays = 0;
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                numDays = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                numDays = 30;
                break;
            case 2:
                if (((year % 4 == 0) && 
                     !(year % 100 == 0))
                     || (year % 400 == 0))
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                System.out.println("Invalid month.");
                break;
        }
        System.out.println("Number of Days = "
                           + numDays);
    }
}

这是代码的输出:

Number of Days = 29

FALLTHOUGH:

另一个关注点是 break 语句。每个 break 语句终止封闭的 switch 语句。控制流继续 switch 块后面的第一个语句。break 语句是必需的,因为没有它们,switch 块中的语句fall through:匹配 case 标签之后的所有语句都将按顺序执行,而不管后续 case 标签的表达式如何,直到遇到 break 语句。

示例代码:

public class SwitchFallThrough {
    public static void main(String[] args) {
        java.util.ArrayList<String> futureMonths =
            new java.util.ArrayList<String>();
        int month = 8;
        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");
            default: break;
        }
        if (futureMonths.isEmpty()) {
            System.out.println("Invalid month number");
        } else {
            for (String monthName : futureMonths) {
               System.out.println(monthName);
            }
        }
    }
}

这是代码的输出:

August
September
October
November
December

在 switch 语句中使用字符串

在 Java SE 7 及更高版本中,可以在 switch 语句的表达式中使用 String 对象。的代码示例根据名为 month 的 String 的值显示月份数:

public class StringSwitchDemo {
    public static int getMonthNumber(String month) {
        int monthNumber = 0;
        if (month == null) {
            return monthNumber;
        }
        switch (month.toLowerCase()) {
            case "january":
                monthNumber = 1;
                break;
            case "february":
                monthNumber = 2;
                break;
            case "march":
                monthNumber = 3;
                break;
            case "april":
                monthNumber = 4;
                break;
            case "may":
                monthNumber = 5;
                break;
            case "june":
                monthNumber = 6;
                break;
            case "july":
                monthNumber = 7;
                break;
            case "august":
                monthNumber = 8;
                break;
            case "september":
                monthNumber = 9;
                break;
            case "october":
                monthNumber = 10;
                break;
            case "november":
                monthNumber = 11;
                break;
            case "december":
                monthNumber = 12;
                break;
            default: 
                monthNumber = 0;
                break;
        }
        return monthNumber;
    }
    public static void main(String[] args) {
        String month = "August";
        int returnedMonthNumber =
            StringSwitchDemo.getMonthNumber(month);
        if (returnedMonthNumber == 0) {
            System.out.println("Invalid month");
        } else {
            System.out.println(returnedMonthNumber);
        }
    }
}

此代码的输出为 8。

FROM Java Docs
60

您可以执行以下操作,为一个 switch 语句使用多个 case:

case "firstCase":
case "secondCase": {
    // Run code here for both cases
}
30

case值只是可以共享相同入口点的无代码“goto”点:

case text1:
case text4: 
    //blah
    break;

请注意,大括号是多余的。

30

摘要:用逗号分隔

switch (name) {
    case text1 , text4  -> doX() ;
    case text2          -> doY() ;
    case text3          -> doZ() ;
}

开关表达式

通过在Java 14和更高版本中集成JEP 361: Switch Expressions,可以使用在多个值之间使用逗号的开关标签的新形式

case text1, text4 -> {
     //blah
} 

或者从one of the answers中改写演示,如下所示:-

public class RephraseDemo {
    public static void main(String[] args) {
        int month = 9;
        int year = 2018;
        int numDays = 0;
        switch (month) {
            case 1, 3, 5, 7, 8, 10, 12 ->{
                numDays = 31;
            }
            case 4, 6, 9, 11 ->{
                numDays = 30;
            }
            case 2 ->{
                if (((year % 4 == 0) &&
                        !(year % 100 == 0))
                        || (year % 400 == 0))
                    numDays = 29;
                else
                    numDays = 28;
            }
            default ->{
                System.out.println("Invalid month.");
            }
        }
        System.out.println("Number of Days = " + numDays);
    }
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(606)
C语言基础学习班:用C语言编写一个程序来读取和打印一个班的n个学生的名字
上一篇
反函数是什么:获得反函数的最简单方法是什么
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(53条)