无法理解它是如何工作的:星期一:星期五:

时间:2019-06-02 08:04:01

标签: java switch-statement colon

import java.time.LocalDate;
import static java.time.DayOfWeek.*;
public class Test 
{
    public static void main(String[] args) 
    {
        var today=LocalDate.now().with(WEDNESDAY).getDayOfWeek();
        switch(today)
        {
            case SUNDAY:
            case SATURDAY:
                System.out.println("Enjoy");
                break;
            case MONDAY : FRIDAY:
                System.out.println("Boaring");
            default:
                System.out.println("QuestionMark");
        }       
    }
}

工作方式。任何人都可以帮忙。特别是这条线让我吃惊:

case MONDAY : FRIDAY:

2 个答案:

答案 0 :(得分:4)

这看起来像是一个讨厌的语法滥用案例。在这种情况下,case MONDAY:会达到您的期望。

但是,FRIDAY:与切换块完全没有关系。它是附加在以下println语句之后的Java label,并且由于从未被引用过,因此除了引起严重的混淆之外,它没有其他意义。

注意:切勿使用标签。有很多更清晰的方式表达您的想法。

答案 1 :(得分:1)

我认为chrylis已经很好地解释了您的代码如何工作。作为更多背景知识:存在一种编程语言,这些语言接受一系列值作为类switch语句中的大小写标签。但是,在Java和其他具有类似C的switch语句的语言中,您需要分别指定每种情况,例如:

    case MONDAY:
    case TUESDAY:
    case WEDNESDAY:
    case THURSDAY:
    case FRIDAY:
        System.out.println("Boaring");
        break;

您还丢失了我认为在打印break之后打算使用的Boaring语句(否则该案例将“掉入”到下一个案例并另外打印QuestionMark)。 / p>

Java 12对switch语句语法进行了一些改进。例如,请参见this answer by YCF_L中的编辑。