【问题标题】:Getting an error when I make a switch with a string使用字符串进行切换时出错
【发布时间】:2014-10-22 17:03:05
【问题描述】:

当我尝试使用字符串进行切换时收到错误消息。这是错误:

incompatible types found: 
java.lang.String 
required: int 
switch(monthName){

这使得我似乎只能使用 int 进行切换,但我很确定在较新的 Java 版本中,您可以使用 String 进行切换。这是给我错误的代码:

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;

【问题讨论】:

  • 您使用的是什么版本的 Java?从 Java 7 开始就可以打开字符串了。
  • 这就是问题所在。我更新了java并重新启动,现在它可以正确编译。谢谢!

标签: java string switch-statement


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在你的类中定义枚举:

    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
    }
    

    【讨论】:

    • 你好。我稍微编辑了您的答案,将“代码 sn-p”工具更改为“代码示例”。使用“Code sn-p”来展示 HTML/CSS/JS 示例(实际上可以通过浏览器运行的代码)。要像 Java 一样格式化代码,请使用“代码示例”(在编辑器中标记为 {})。
    • 谢谢,我会记住的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2016-04-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多