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.
==
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
.
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)
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)){