H G
H G

Reputation: 1

Java Not Equals String syntax not working

This code will not perform the if statement on the multiple ORS (i.e. || ) and I can't figure out why, can someone help? New to 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);

Upvotes: 0

Views: 184

Answers (3)

Osusara Kammalawatta
Osusara Kammalawatta

Reputation: 133

In your code you are asking "if item number is not equal to "A123" OR "A55" OR "B750" OR "C650", then do these things". So when you input "A55", program checks that is "A55" not equals to "A123" or "A55".... Ohh It's not equal "A123" so the condition is true.

If you change what you ask like this. "if item number is not equal to "A123" AND "A55" AND "B750" AND "C650", then do these things". So when you input "A55", program checks that is "A55" not equals to "A123" and "A55"... Ohh it's not "not equal" to "A55" so the condition is false. Example,

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

Or you can change what you asking to something like this, "if item number is equal to "A123" or "A55" or "B750" or "C650", then print "Thank You" and else do these things." It would be correct. Example,

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

Upvotes: 2

Yohan Malshika
Yohan Malshika

Reputation: 733

Your mistake is you use 'or' Operation. you should use 'AND' Operation for it.. also if you use Arrays.asList with contains() method for this problem , I think it is easy way to this.

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

Upvotes: 1

ortis
ortis

Reputation: 2223

You probably want to use the 'AND' operation instead of 'OR':

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

which translate into "if itemNumber is not equal to A123 AND itemNumber is not equal to A55 AND itemNumber is not equal to B750 AND itemNumber is not equal to C650"

An even better approach would be to use the switch statement:

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

Upvotes: 1

Related Questions