切换语句语法错误

时间:2012-01-22 23:34:26

标签: java switch-statement

我正在尝试测试我的用户是否提交了敏感数据,后来将其格式化为整数。 switch语句的问题在哪里? :)

void convert(String str)
{
    int i=0;
    String x=str.startsWith();
    switch (x) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 0:
            int i = Integer.parseInt(str);
            break;
        default:
            System.out.println ("Should start with fixnumber");
    }
    System.out.println (i);
}

4 个答案:

答案 0 :(得分:2)

您正在启用 x 这是一个字符串 - 除非您使用的是Java 7,否则不能在Switch语句中使用String。

我希望错误实际上来自 str.startsWith(),其中该方法期望获取一个String(您正在检查它的开头)并返回一个布尔值,你也无法开启。

更新更正您的代码以执行我认为您尝试执行的操作:

void convert(String str)
{
    int i = 0;
    switch (str.charAt(0)) {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '0':
            i = Integer.parseInt(str);
            break;
        default:
            System.out.println ("Should start with fixnumber");
    }
    System.out.println (i);
}

虽然较短的方法只是执行 Integer.parseInt 调用,并处理可能发生的NumberFormatException,但您根本不需要进行切换。

void convert(String str)
{
    try {
        int i = Integer.parseInt(str);
        System.out.println (i);
    } catch (NumberFormatException e) {
        System.out.println ("Should start with fixnumber");
    }
}

您需要返回i; 并将方法签名从 void 转换为 int ,否则会在中公开数据我让它变得有价值。

答案 1 :(得分:1)

x是一个字符串,以防你测试号码。 尝试:

case "string1"
..
break;
case "string2"
..
break;
etc...

答案 2 :(得分:1)

如果您正在尝试测试以查看输入的字符串是否为整数,那么我认为没有理由首先使用switch()。在尝试使用该函数时捕获引发的异常将是更好的行为。

示例:

void convert(String str) { // Heads-up:  convert has <package> visibility
    int i = 0;
    try {
        i = Integer.parseInt(str);
        System.out.println(i);
    } catch (NumberFormatException nfe) {
        System.out.println ("Should start with fixnumber");
    }
}

答案 3 :(得分:0)

您的x是一个字符串。 switch语句正在尝试将其与整数值进行比较。你需要这样的东西:

switch (Integer.parseInt(x))
{
   // etc...

编辑:实际上,现在我发现字符串应该是一个startsWith调用的结果,我对这段代码试图做的事情感到很困惑。

相关问题