Java 使用字符串进行切换时出错

Java 使用字符串进行切换时出错,java,string,switch-statement,Java,String,Switch Statement,当我尝试使用字符串进行切换时,收到一条错误消息。以下是错误: incompatible types found: java.lang.String required: int switch(monthName){ switch(monthName){ case "December"://Always has 31 days daysLeft = 31; daysLeft -= dayOfMonth;

当我尝试使用字符串进行切换时,收到一条错误消息。以下是错误:

incompatible types found: 
java.lang.String 
required: int 
switch(monthName){
switch(monthName){
        case "December"://Always has 31 days
            daysLeft = 31;
            daysLeft -= dayOfMonth;
            break;
        case "November"://Always has 30 days
            daysLeft = 61;
            daysLeft -= dayOfMonth;
            break;
        case "October"://Always has 31 days
            daysLeft = 92;
            daysLeft -= dayOfMonth;
            break;
        case "September"://Always has 30 days
            daysLeft = 122;
            daysLeft -= dayOfMonth;
            break;
这使得我似乎只能用int来做一个开关,但我非常确定,在最近的Java版本中,可以用字符串来做一个开关。下面是给出错误的代码:

incompatible types found: 
java.lang.String 
required: int 
switch(monthName){
switch(monthName){
        case "December"://Always has 31 days
            daysLeft = 31;
            daysLeft -= dayOfMonth;
            break;
        case "November"://Always has 30 days
            daysLeft = 61;
            daysLeft -= dayOfMonth;
            break;
        case "October"://Always has 31 days
            daysLeft = 92;
            daysLeft -= dayOfMonth;
            break;
        case "September"://Always has 30 days
            daysLeft = 122;
            daysLeft -= dayOfMonth;
            break;

无法为低于1.7的源级别打开字符串类型的值。仅允许可转换的int值或枚举常量

在类中定义枚举:

public enum MonthName {
    December, November, October, September
}
使用val变量根据字符串输入提供切换功能-

String val = "December";//can be taken from user through Scanner class
MonthName monthName = MonthName.valueOf(val);//Enum class object

switch (monthName) {
    case December://Always has 31 days
        daysLeft = 31;
        daysLeft -= dayOfMonth;
        break;
    case November://Always has 30 days
        daysLeft = 61;
        daysLeft -= dayOfMonth;
        break;
    case October://Always has 31 days
        daysLeft = 92;
        daysLeft -= dayOfMonth;
        break;
    case September://Always has 30 days
        daysLeft = 122;
        daysLeft -= dayOfMonth;
        break;
    }
    System.out.println(dayOfMonth + "---" + daysLeft);//Test of output
}

您使用的是什么版本的Java?从Java7开始,字符串开关就可用。这就是问题所在。我更新了java并重新启动,现在它可以正确编译了。谢谢你好我对您的答案进行了一些编辑,将“代码片段”工具更改为“代码示例”。使用“代码片段”展示HTML/CSS/JS示例(实际上可以通过浏览器运行的代码)。要像Java一样格式化代码,请使用“代码示例”(在编辑器中用
{}
标记)