! = оператор не работает при сравнении переменной с целым числом - PullRequest
0 голосов
/ 03 мая 2018

Все, что я пытаюсь сделать, это создать цикл проверки, если пользователь вводит что-либо, кроме «1» или «2» ... но когда я тестирую программу, независимо от того, какой номер я ввел (включая 1 и 2 ), цикл проверки запрашивает. Я слепой? Я не вижу, что не так с этим синтаксисом.

public static int getValidShiftNbr(String msg)
  {
    int nbr = IR4.getInteger(msg);
    while ((nbr != 1) || (nbr != 2))  <===================================
    {
      System.err.println("Error: Please enter either 1 (for day shift) or 2 (for night shift)");
      nbr = IR4.getInteger(msg);
    }
    return nbr;
  }

Ответы [ 4 ]

0 голосов
/ 03 мая 2018

в вашем коде:

if (nbr == 1); что случилось

nbr != 1 => false
nbr != 2 => true

(false) || (true) => true , поскольку это оператор ИЛИ

для достижения того, что вы хотите, используйте оператор AND

(nbr != 1) && (nbr != 2)

1) if (nbr == 1)

(nbr != 1) && (nbr != 2) // false AND true => false

2) if (nbr == 2)

 (nbr != 1) && (nbr != 2) // true AND false => false

3) if (nbr == 3)

(nbr != 1) && (nbr != 2) // true AND true => true
0 голосов
/ 03 мая 2018

! = Работает, || (который или) также работает все значения nbr будут! = до 1 ИЛИ ОНИ БУДУТ! = до 2 (возможно, оба)

btw: nbr - это имя младшей переменной - лучше назвать число или смещение

Кстати: я предлагаю использовать n или N или d или D, чтобы определить сдвиг, потому что компьютер должен делать работу, а не человек

ваш код должен быть

while ((nbr! = 1) && (nbr! = 2))

0 голосов
/ 03 мая 2018

Когда вы пишете:

while ((nbr != 1) || (nbr != 2))

Значение всегда будет истинным, потому что любой вводимый вами сигнал всегда будет вызывать (nbr != 1) или (nbr != 2)

Если вы хотите, чтобы пользователь вводил только 1 или 2:

while ((nbr != 1) && (nbr != 2))

Или

while (!((nbr == 1) || (nbr == 2)))
0 голосов
/ 03 мая 2018

Если вы используете ИЛИ ||, оно должно удовлетворять только одному из условий, в вашем случае, если вы введете 1 ИЛИ 2, условие будет true.

Вы хотите использовать оператор AND &&, чтобы убедиться, что ни один из них, как показано ниже:

while ((nbr != 1) && (nbr != 2))

OR

while (!((nbr == 1) || (nbr == 2)))

Здесь условие будет true для любого числа, отличного от 1 и 2

...