slechte operandtypen voor binaire operator “&” java

De fout toont deze regel

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

Dit is de hele code:

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

Ik heb de code aangepast:

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

Er was een probleem met de haakjes, voor iedereen in de toekomst bijgewerkt.


Antwoord 1, autoriteit 100%

==heeft een hogere prioriteit dan &. Misschien wilt u uw bewerkingen in ()plaatsen om aan te geven hoe u wilt dat uw operanden aan de operators binden.

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

Hetzelfde geldt voor alle delen van de ifvoorwaarde.


Antwoord 2, autoriteit 5%

Omdat &een mindereprioriteit heeft dan ==.

Uw code is gelijk aan a[0] & (1 == 0), en tenzij a[0]een boolean is, dit zal niet compileren …

U moet:

(a[0] & 1) == 0

etc enz.

(Ja, Java doet Hava een Booleaanse &operator – een niet-snelkoppeling logisch en)


Antwoord 3

U moet nauwkeuriger zijn, gebruikmakend van haakjes, anders zal Java de volgorde van operanden niet gebruiken die u wilt gebruiken.

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

wordt

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

Other episodes