为什么此转换案例在Netbeans中不起作用?

时间:2018-10-20 16:12:44

标签: java switch-statement

切换案例具有价值,但只有默认案例在运行。

int z = Integer.parseInt(x);
JOptionPane.showMessageDialog(null,+z);
    switch (z) {
    case ('1'):
        C.SetEmpInformation();
        break;
    case ('2'):
        C.UpdateEmpInformation();
        break;
    default:
        JOptionPane.showMessageDialog(null, "Invalid Identity");
}

3 个答案:

答案 0 :(得分:3)

删除case语句中的单引号。它们将被匹配为char,而不是int。 “ 1”是character,与数字1完全不同。

 switch (z) {
   case 1: /* .... */
   case 2: /* .... */
   default : /* .... */
}

您也不需要括号。

答案 1 :(得分:1)

您在case语句中检查的类型是错误的,您将intz)与char'1')进行比较。 / p>

您需要这样编写case

JOptionPane.showMessageDialog(null, + z); // btw, what is this + doing here?
    switch (z) {
    case 1:
        C.SetEmpInformation();
        break;
    case 2:
        C.UpdateEmpInformation();
        break;
    default:
        JOptionPane.showMessageDialog(null, "Invalid Identity");
        break;
}

答案 2 :(得分:0)

它在NetBeans中也适用于我,因此,即使它不能在您的计算机上启动,您也可以使用一些验证工具,如linter,诸如此类。
无论如何,您编写的都是正确的Java代码,只是它可能无法满足您的期望,而这正是消息所指示的。
您可以switch处理数字,字符和字符串,所有这些都可以使用。只是不要混合它们:它们要么不会编译(将数字/字符与String混合),要么会以一种可能无法预料的方式工作(将数字与字符混合),因为1是一个数字,但'1'是一个字符,用ASCII码表示为数字49。

测试代码:

String x="1";
int z=Integer.parseInt(x);
switch(z){
  case ('1'): System.out.println(z+" is '1'");break;
  default: System.out.println(z+" is not '1'");
}

x="49";
z=Integer.parseInt(x);
switch(z){
  case ('1'): System.out.println(z+" is '1'");break;
  default: System.out.println(z+" is not '1'");
}

x="1";
z=Integer.parseInt(x);
switch(z){
  case 1: System.out.println(z+" is 1");break;
  default: System.out.println(z+" is not 1");
}

switch(x.charAt(0)){
  case '1': System.out.println("\"1\".charAt(0) is '1'");break;
  default: System.out.println("\"1\".charAt(0) is not '1'");
}

switch(x){
  case "1": System.out.println("\""+x+"\" is \"1\"");break;
  default: System.out.println("\""+x+"\" is not \"1\"");
}    

输出:

1 is not '1'
49 is '1'
1 is 1
"1".charAt(0) is '1'
"1" is "1"