Почему этот случай коммутатора не работает в Netbeans? - PullRequest
0 голосов
/ 20 октября 2018

Регистр переключателя принимает значение, но работает только регистр по умолчанию.

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 голосов
/ 20 октября 2018

Тип, который вы проверяете в своих case заявлениях, неверен, вы сравниваете int (z) с char ('1').

Вам необходимо написать свой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;
}
0 голосов
/ 20 октября 2018

Он работает и для меня в NetBeans, поэтому, если он даже не запускается на вашем компьютере, у вас может быть какой-нибудь инструмент проверки, linter, что-то в этом роде.
В любом случае, то, что вы пишете, является правильным кодом Java, простоэто не будет делать то, что вы ожидаете, и это то, что может указывать в сообщении.
Вы можете switch на числах, символах и строках, все они работают.Только не смешивайте их: они либо не будут компилироваться (смешивая числа / символы со строкой), либо будут работать, вероятно, неожиданным образом (смешивая числа с символами), потому что 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"
0 голосов
/ 20 октября 2018

Удалите одинарные кавычки в ваших заявлениях.Они будут соответствовать как char, а не int.«1» - это character и очень отличается от числа 1.

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

Вам также не понадобятся скобки.

...