为什么我的Java switch语句不起作用?

时间:2015-11-04 18:31:21

标签: java switch-statement

我正在尝试使用一系列JUnit Asserts对Java切换方法执行以下操作,但在两种情况下仍然使用“小于”和“大于”(请参阅​​下面的字符串/ int错误),并且不是确定如何使用“>”和“<”在我的情况下。

以下是我的代码后面的练习,然后是错误。

/*  
Create a method which uses a switch statement to return a String representing the int passed in as a parameter to the method:
            • given 1 return "One"
            • given 2 return "Two"
            • given 3 return "Three"
            • given 4 return "Four"
            • given an integer > 4, return "Too big"
            • given an integer < 1, return "Too small"
*/
@Test
public void switchIntExample() {
    assertEquals("One", stringRepInt(1));
    assertEquals("Two", stringRepInt(2));
    assertEquals("Three", stringRepInt(3));
    assertEquals("Four", stringRepInt(4));
    assertEquals("Too big.", stringRepInt(>4));      
//        assertEquals("Too small.", stringRepInt(<4));
}

//Switch statement for above:
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;           
     //TODO:  question on how to do LESS THAN and GREATER THAN:
     // error line: 
     case  (numVar > 4):
            numVar = "Too big.";
            break;

        default:
            break;
    }
    System.out.println(numVar);
    return numVar;
}

错误: 错误:(293,27)java:二元运算符'&gt;'的错误操作数类型   第一种类型:java.lang.String   第二种类型:int

4 个答案:

答案 0 :(得分:1)

case语句仅支持常量表达式(您不能在case中执行少于或大于numVar,并且无法测试String - {{1} } - 小于)。您可以使用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;
}

答案 1 :(得分:0)

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

default:
    numVar = "Too Big";
    break;

答案 2 :(得分:0)

默认部分的目的是处理交换机案例未处理的所有情况。您应该通过在默认部分中添加“if checks”来充分利用它(如评论中提到的@GreenMatt和@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;
}

此外,如果要检查数字小于1,可以在if语句下添加else if (numberSize < 1) numVar = "Too small";。这也很重要,因为它会阻止您的方法返回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";
            else
                numVar = "Too small";
            break;
    }
    System.out.println(numVar);
    return numVar;
}

答案 3 :(得分:-1)

在错误行中,您正在比较String和int。

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

你已经将numVar声明为String并将其与int值4进行比较。请更正或者我认为您正在尝试将numberSize与值进行比较4.将该String转换为int并进行比较。