Подтвердить что ты не робот

Неправильные типы операндов для двоичного оператора "&" java

Ошибка показывает эту строку

 if ((a[0] & 1 == 0) && (a[1] & 1== 0) && (a[2] & 1== 0)){

Это весь код:

public class Ex4 {

  public static void main(String[] args) {
  int [] a = new int [3];
  if(args.length == 3)
  {
      try{
        for(int i = 0; i < args.length; i++)
        {
        a[i] = Integer.parseInt(args[i]);
        }
        }
        catch(NumberFormatException e){
            System.out.println("Wrong Argument");
       }
      if ((a[0] & 1 == 0) && (a[1] & 1== 0) && (a[2] & 1== 0)){
        System.out.println("yes");
      }
    else {
        System.out.println("no");
    }
  }
  else{
      System.out.println("Error");
    }
}
}

Я исправил код:

if ((a[0] & 1) == 0 && (a[1] & 1) == 0 && (a[2] & 1) == 0){

Была проблема с скобками, обновленная для любого в будущем.

4b9b3361

Ответ 1

== имеет более высокий приоритет, чем &. Возможно, вы захотите объединить свои операции в (), чтобы указать свой собственный приоритет.

((a[0] & 1) == 0)

Аналогично для всех частей условия if.

Ответ 2

Потому что & имеет меньший приоритет, чем ==.

Ваш код эквивалентен a[0] & (1 == 0), и если a[0] не является логическим, это не будет компилироваться...

Вам необходимо:

(a[0] & 1) == 0

и т.д.

(да, Java делает hava логическим оператором & - нестрочным логическим и)

Ответ 3

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

if ((a[0] & 1 == 0) && (a[1] & 1== 0) && (a[2] & 1== 0)){

становится

if (((a[0] & 1) == 0) && ((a[1] & 1) == 0) && ((a[2] & 1) == 0)){