为什么不是';我的Java switch语句不能工作吗?

为什么不是';我的Java switch语句不能工作吗?,java,switch-statement,Java,Switch Statement,我试图对一个带有一系列JUnit断言的Java switch方法执行以下操作,但在两种情况下(请参见下面的string/int错误),我一直坚持使用“小于”和“大于”,并且不确定如何在比较string和int的错误行中使用“>”和“” error line: case (numVar > 4): numVar = "Too big."; break; 您已将numVar声明为String,并将其与int值4进行比较。请更正此错误,否则我认为您正在尝试将numberSize与值4进行比较。

我试图对一个带有一系列JUnit断言的Java switch方法执行以下操作,但在两种情况下(请参见下面的string/int错误),我一直坚持使用“小于”和“大于”,并且不确定如何在比较string和int的错误行中使用“>”和“”

error line: case (numVar > 4): numVar = "Too big."; break;

您已将numVar声明为String,并将其与int值4进行比较。请更正此错误,否则我认为您正在尝试将numberSize与值4进行比较。将该字符串转换为int并进行比较。

case
语句仅支持常量表达式(在
情况下,不能小于或大于,并且不能用小于测试
numVar
-字符串
)。您可以使用
if

public String stringRepInt(int numberSize) {
    String numVar = null;
    if (numberSize > 4) {
         numVar = "Too big.";
    } else {
        switch (numberSize) {
        case 1:
            numVar = "One";
            break;
        case 2:
            numVar = "Two";
            break;
        case 3:
            numVar = "Three";
            break;
        case 4:
            numVar = "Four";
            break;       
        default:
            break;
    }
    System.out.println(numVar);
    return numVar;
}

您应该将其添加到默认部分,如下所示:

default:
    numVar = "Too Big";
    break;

默认部分的目的是处理交换机案例未处理的所有案例。您应该利用这一点(如评论中提到的@Greenmart和@FredK),将“如果检查”放在默认部分,如下所示:

public String stringRepInt(int numberSize) {

    String numVar = null;

    switch (numberSize) {
        case 1:
            numVar = "One";
            break;
        case 2:
            numVar = "Two";
            break;
        case 3:
            numVar = "Three";
            break;
        case 4:
            numVar = "Four";
            break;
        default:
            if(numberSize > 4)
                numVar = "Too big";
            break;
    }
    System.out.println(numVar);
    return numVar;
}
public String stringRepInt(int numberSize) {

    String numVar = null;

    switch (numberSize) {
        case 1:
            numVar = "One";
            break;
        case 2:
            numVar = "Two";
            break;
        case 3:
            numVar = "Three";
            break;
        case 4:
            numVar = "Four";
            break;
        default:
            if(numberSize > 4)
                numVar = "Too big";
            else
                numVar = "Too small";
            break;
    }
    System.out.println(numVar);
    return numVar;
}
此外,如果要检查数字是否小于1,可以在if语句下添加
else if(numberSize<1)numVar=“太小”
。这也很重要,因为它可以防止方法返回
null
(当前,如果用户输入的值小于1,则会发生这种情况)

生成的代码如下所示:

public String stringRepInt(int numberSize) {

    String numVar = null;

    switch (numberSize) {
        case 1:
            numVar = "One";
            break;
        case 2:
            numVar = "Two";
            break;
        case 3:
            numVar = "Three";
            break;
        case 4:
            numVar = "Four";
            break;
        default:
            if(numberSize > 4)
                numVar = "Too big";
            break;
    }
    System.out.println(numVar);
    return numVar;
}
public String stringRepInt(int numberSize) {

    String numVar = null;

    switch (numberSize) {
        case 1:
            numVar = "One";
            break;
        case 2:
            numVar = "Two";
            break;
        case 3:
            numVar = "Three";
            break;
        case 4:
            numVar = "Four";
            break;
        default:
            if(numberSize > 4)
                numVar = "Too big";
            else
                numVar = "Too small";
            break;
    }
    System.out.println(numVar);
    return numVar;
}

你为什么认为
案例(numVar>4):
应该有效吗?在switch语句中不能将布尔运算作为case。请将测试放在
default
部分。这只是一个练习…正如@GreenMatt所提到的,您应该将if测试放在default部分。请注意,您还应该检查零输入和负输入。我将尝试“if”“最后两个案例的陈述,看看是否有效……谢谢……如果有效,我将公布结果。是的,我将在我的初始练习中完成最后两个案例后测试其他案例……再次感谢。非常感谢大家。你们的反馈和示例非常好。对我来说,最关键的一句话是,“默认部分的目的是处理所有未由切换案例处理的案例”。这一点非常准确。我完成了练习,没有看你的答案@Bimbe,而是使用了Greenmart和FredK提供的“如果”提示,包括最后的“小于”断言。