Java не равно строковый синтаксис не работает - PullRequest
0 голосов
/ 28 июня 2018

Этот код не будет выполнять оператор if для нескольких ORS (т.е. ||), и я не могу понять, почему кто-то может помочь? Новое в Java.

    if (!"A123".equals(itemNumber) || !"A55".equals(itemNumber) || !"B750".equals(itemNumber) 
                                   || !"C650".equals(itemNumber))
    {
        System.out.print("\nInvalid Item. Try again. ");
        System.out.print("\nEnter an item number or END to exit: ");
        itemNumber = keyboard.nextLine();
    }
    System.out.printf("\nThank you. %s", itemNumber);

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Ваша ошибка в том, что вы используете 'или' Операция. вы должны использовать 'AND' Operation для этого .. также, если вы используете Arrays.asList с методом contains () для этой проблемы, я думаю, что это простой способ.

if (!"A123".equals(itemNumber) && !"A55".equals(itemNumber) && !"B750".equals(itemNumber)  && !"C650".equals(itemNumber))
{

    System.out.print("\nInvalid Item. Try again. ");
    System.out.print("\nEnter an item number or END to exit: ");
    itemNumber = keyboard.nextLine();
}

    System.out.printf("\nThank you. %s", itemNumber);
0 голосов
/ 01 июля 2018

В вашем коде вы спрашиваете, «если номер элемента не равен« A123 »ИЛИ« A55 »ИЛИ« B750 »ИЛИ« C650 », тогда сделайте эти вещи». Поэтому, когда вы вводите «A55», программа проверяет, что «A55» не равно «A123» или «A55» .... Ооо Это не равно «A123», поэтому условие истинно.

Если вы измените то, что просите, вот так. «если номер позиции не равен« A123 »И« A55 »И« B750 »И« C650 », то делать это». Поэтому, когда вы вводите «A55», программа проверяет, что «A55» не равно «A123» и «A55» ... Ох, это не «не равно» «A55», поэтому условие ложно. Пример,

if (!"A123".equals(itemNumber) && !"A55".equals(itemNumber) && !"B750".equals(itemNumber) && !"C650".equals(itemNumber))
{
    System.out.print("\nInvalid Item. Try again. ");
    System.out.print("\nEnter an item number or END to exit: ");
    itemNumber = keyboard.nextLine();
}
System.out.printf("\nThank you. %s", itemNumber);

Или вы можете изменить то, что вы просите, на что-то вроде этого, «если номер элемента равен« A123 »или« A55 », или« B750 », или« C650 », то выведите« Thank You », а в противном случае сделайте это». Это было бы правильно. Пример,

if ("A123".equals(itemNumber) || "A55".equals(itemNumber) || "B750".equals(itemNumber) || "C650".equals(itemNumber))
{
    System.out.printf("\nThank you. %s", itemNumber);
}
else{
    System.out.print("\nInvalid Item. Try again. ");
    System.out.print("\nEnter an item number or END to exit: ");
    itemNumber = keyboard.nextLine();
}
0 голосов
/ 28 июня 2018

Возможно, вы хотите использовать операцию «И» вместо «ИЛИ»:

if (!"A123".equals(itemNumber) && !"A55".equals(itemNumber) && !"B750".equals(itemNumber) && !"C650".equals(itemNumber))
{
        System.out.print("\nInvalid Item. Try again. ");
        System.out.print("\nEnter an item number or END to exit: ");
        itemNumber = keyboard.nextLine();
}

System.out.printf("\nThank you. %s", itemNumber);

, что переводится как "если itemNumber не равно A123, а itemNumber не равно A55, а itemNumber не равно B750, а itemNumber не равно C650"

Еще лучшим подходом было бы использование оператора switch:

switch(itemNumber)
{
  //fall through all acceptable case
  case "A123":
  case "A55":
  case "B750":
  case "C650":
    System.out.printf("\nThank you. %s", itemNumber);
  break;

  // no acceptable match found
  default:
    System.out.print("\nInvalid Item. Try again. ");
    System.out.print("\nEnter an item number or END to exit: ");
    itemNumber = keyboard.nextLine();
   break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...