Using two values for one switch case statement

前端 未结 12 1732
梦谈多话
梦谈多话 2020-11-28 17:56

In my code, the program does something depending on the text entered by the user. My code looks like:

switch (name) {
        case text1: {
            //bla         


        
相关标签:
12条回答
  • 2020-11-28 18:34

    Java 12 and above

    switch (name) {
        case text1, text4 -> // do something ;
        case text2, text3, text 5 -> // do something else ;
        default -> // default case ;
    }
    

    You can also assign a value through the switch case expression :

    String text = switch (name) {
        case text1, text4 -> "hello" ;
        case text2, text3, text5 -> "world" ;
        default -> "goodbye";
    };
    

    "yield" keyword

    It allows you to return a value by the switch case expression

    String text = switch (name) {
        case text1, text4:
            yield "hello";
        case text2, text3, text5:
            yield "world";
        default:
            yield "goodbye";
    };
    
    0 讨论(0)
  • 2020-11-28 18:35

    Just do

    case text1: case text4: 
         do stuff;
         break;
    
    0 讨论(0)
  • 2020-11-28 18:35

    Fall through approach is the best one i feel.

    case text1:
    case text4: {
            //Yada yada
            break;
    } 
    
    0 讨论(0)
  • 2020-11-28 18:40

    The case values are just codeless "goto" points that can share the same entry point:

    case text1:
    case text4: 
        //blah
        break;
    

    Note that the braces are redundant.

    0 讨论(0)
  • 2020-11-28 18:41

    The brackets are unnecessary. Just do

    case text1:
    case text4:
      doSomethingHere();
      break;
    case text2:
      doSomethingElse()
      break;
    

    If anyone is curious, this is called a case fallthrough. The ability to do this is the reason why break; is necessary to end case statements. For more information, see the wikipedia article http://en.wikipedia.org/wiki/Switch_statement.

    0 讨论(0)
  • 2020-11-28 18:43

    With the integration of JEP 325: Switch Expressions (Preview) in JDK-12 early access builds, one can now make use of the new form of the switch label as :-

    case text1, text4 -> {
         //blah
    } 
    

    or to rephrase the demo from one of the answers, something like :-

    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);
        }
    }
    

    Here is how you can give it a try - Compile a JDK12 preview feature with Maven

    0 讨论(0)
提交回复
热议问题