Почему этот переключатель не работает в Netbeans?

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

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");
}

«1» - это символ, а не цифра 1. Является ли значение переменной z1 или 49 (значение ASCII символа 1)? Кроме того, как стилистическая вещь, круглые скобки в ярлыках кейсов выглядят странно и могут сбить с толку людей.

Sami Kuhmonen 20.10.2018 18:14

попробуйте case 1: и case 2:

Mustafa Çil 20.10.2018 18:15

Обратите внимание, что ваш пример не работал бы и с Eclipse. Если это так, скорее всего, код был другим. (Это базовая Java ... не разница в IDE.)

Stephen C 28.04.2020 05:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
550
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Удалите одинарные кавычки в операторах 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. Почему?

Syed Babar Ali Shah 3261-FBASB 20.10.2018 18:38

Вы не написали неправильный код с точки зрения компилятора, это кажется ему верным. Проблема заключалась в том, что он работал не так, как вы хотели ...

deHaar 20.10.2018 19:28

У меня он работает и в 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"

Другие вопросы по теме