java - 尝试将 if-else 语句转换为 switch 语句,但最终出现错误

标签 java if-statement compiler-errors switch-statement

我一直在尝试将以下 if 语句转换为 switch 语句。

/**
 * Return appropriate comment for given score and par for hole.
 * You can assume that score is not less than 4 below par for hole.
 * For example, if score is 4 below par, return "condor!!!!",
 * if score is 3 below par, return "albatross!!!",
 * if score is 2 below par, return "eagle!!", etc.
 * See Assign 2 description for full list of comments.
 * @param score
 * @param parForHole
 * @return appropriate comment for given score and par for hole.
 */
public static String comment(int score, int parForHole) {   
    if ( score == parForHole-4)
        return "condor!!!!";
    if ( score == parForHole-3)
        return "albatross!!!";
    if ( score == parForHole-2)
        return "eagle!!";
    if ( score == parForHole-1)
        return "birdie!";
    if ( score == parForHole)
        return "par";
    if ( score == parForHole+1)
        return "bogey";
    if ( score == parForHole+2)
        return "double bogey";
    if ( score == parForHole+3)
        return "triple bogey";

return "Not valid"; // Replace by a suitable switch stmt.
}

这是我的尝试:

public static String comment(int score, int parForHole) {   

     String monthString;
        switch (score) {
            case parForHole-4:  monthString = "condor!!!!";
                     break;
            case parForHole-3:  monthString = "albatross!!!";
                     break;
            case parForHole-2:  monthString = "eagle!!";
                     break;
            case parForHole-1:  monthString = "birdie!";
                     break;
            case parForHole:  monthString = "par";
                     break;
            case parForHole+1:  monthString = "bogey";
                     break;
            case parForHole+2:  monthString = "double bogey";
                     break;
            case parForHole+3:  monthString = "triple bogey";
                     break;
            default: monthString = "Invalid";
                     break;
        }
        return monthString;

}

当我尝试运行它时,Eclipse 会针对每个 case 条件给出错误,即“case 表达式必须是常量表达式”。我不知道如何克服这个问题。谁能帮我吗?谢谢。

最佳答案

正如 Eclipse 试图告诉您的那样,这在 Java 中是不可能的。 您只能在 case 语句中使用常量表达式,这不太适合您的情况。

无论如何,if-else 和 switch 在这里都不是很好。 最好使用基于表格的解决方案,例如:

static String[] comments = {
    "condor!!!!",
    "albatross!!!",
    "eagle!!",
    "birdie!",
    "par",
    "bogey",
    "double bogey",
    "triple bogey"
};

public static String comment(int score, int parForHole) {
    int index = score - parForHole + 4;
    if (index < 0 || index >= comments.length) {
        return "Not valid";
    }
    return comments[index];
}

关于java - 尝试将 if-else 语句转换为 switch 语句,但最终出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40439113/

相关文章:

java - 迭代字符串并使用 .equals 将结果与另一个字符串进行比较 (Java)

python - 如果循环为空则显示一条消息

javascript - iOS 5 - 编译用于调试的私有(private) API - 特别是 _enableRemoteInspector

java - 从 Web 解析日语文本不会给出正确的字符

java - 将文本文件附加到 StringBuffer 后,有没有办法恢复换行符?

Java:在 Eclipse 中使用其他文件

java - 使用 Gradle 在 Java 之前/与 Java 一起编译 Scala

java - java中的php strtr等价物

java - 循环计算字符串中给定字符数的问题

c++ - 第三方API中的编译错误-Visual Studio