Случай переключателя принимает значение, но работает только случай по умолчанию.
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");
}
попробуйте case 1:
и case 2:
Обратите внимание, что ваш пример не работал бы и с Eclipse. Если это так, скорее всего, код был другим. (Это базовая Java ... не разница в IDE.)
Удалите одинарные кавычки в операторах case. Они будут соответствовать как char
, а не как int
. «1» - это character
, и он сильно отличается от числа 1.
switch (z) {
case 1: /* .... */
case 2: /* .... */
default : /* .... */
}
Кронштейны тоже не понадобятся.
Тип, который вы проверяете в своих операторах 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;
}
Большое спасибо, это сработало, но эта программа успешно работает в Eclipse. Почему?
Вы не написали неправильный код с точки зрения компилятора, это кажется ему верным. Проблема заключалась в том, что он работал не так, как вы хотели ...
У меня он работает и в NetBeans, поэтому, если он даже не запускается на вашем компьютере, у вас может быть какой-нибудь инструмент проверки, линтер или что-то в этом роде.
В любом случае, то, что вы пишете, является правильным кодом 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"
«1» - это символ, а не цифра 1. Является ли значение переменной
z
1
или49
(значение ASCII символа 1)? Кроме того, как стилистическая вещь, круглые скобки в ярлыках кейсов выглядят странно и могут сбить с толку людей.