29

错误显示这一行

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

括号有问题,以后会为任何人更新。

4

3 回答 3

65

==的优先级高于&。您可能希望将操作包装起来()以指定您希望操作数如何绑定到运算符。

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

对于if条件的所有部分也是如此。

于 2014-04-15T21:39:36.733 回答
3

因为优先级低于&.==

您的代码等效于a[0] & (1 == 0),除非a[0]是布尔值,否则将无法编译...

你需要:

(a[0] & 1) == 0

等等等等

(是的,Java 确实有一个布尔&运算符——一个非快捷逻辑与)

于 2014-04-15T21:39:25.173 回答
0

您必须更精确,使用括号,否则 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)){
于 2014-04-15T21:38:03.977 回答