web-dev-qa-db-fra.com

mauvais types d'opérande pour l'opérateur binaire "&" java

L'erreur montre cette ligne 

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

C'est le code entier: 

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

J'ai corrigé le code: 

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

Était un problème avec les crochets, mis à jour pour quiconque à l'avenir.

20
user3364498

== a une priorité supérieure à &. Vous voudrez peut-être encapsuler vos opérations dans () pour spécifier comment vous souhaitez que vos opérandes soient liées aux opérateurs.

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

De même pour toutes les parties de la condition if.

41

Parce que & a une inférieure priorité à ==.

Votre code est équivalent à a[0] & (1 == 0), et à moins que a[0] ne soit un booléen, cela ne compilera pas ...

Tu dois:

(a[0] & 1) == 0

etc.

(oui, Java a un opérateur booléen & - un raccourci logique et)

3
fge

Vous devez être plus précis en utilisant des parenthèses, sinon Java n'utilisera pas l'ordre des opérandes que vous souhaitez utiliser.

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

Devient

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