错误消息“操作员”&&'不能应用于'int''boolean'

时间:2015-09-10 06:29:46

标签: java int boolean

public class LargestEven {
public int largestEven(int x, int y, int z) {
    if(x % 2 = 0 && x > y && x > z) {
        return x;
    } else if (y % 2 = 0 && y > x && y > z) {
        return y;
    } else if (z % 2 = 0 && z > x && z > y) {
        return z;
    } else {
        return 0;
    }
}
public static void main(String[] args) {
    LargestEven l = new LargestEven();
    System.out.println(l.largestEven(1, 3, 5)); //prints 0
    System.out.println(l.largestEven(2, 4, 9)); //prints 4
    System.out.println(l.largestEven(2, 1001, 1003)); //prints 2
    }
}

我必须制作一个程序,找出3个给定数字中最大的偶数。但是我似乎无法让它工作,因为我不断收到此错误消息。我到底错在了什么?

对于初学者问题感到抱歉,但我之前从未见过此错误消息,也不知道它的含义或解决方法。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

您必须检查每个条件的个人和组的偶数和奇数情况,然后检查最大值并返回。

public  int largestEven(int x, int y, int z) {

     if (x % 2 == 0 && (y%2!=0 && z%2!=0)) {

         return x;
     }else if(y%2==0 && (x%2!=0 && z%2!=0) ){

         return y;
     }else if(z%2==0 && (x%2!=0 && y%2!=0) ){

         return z;
     }else if(x%2==0 && y%2==0 && z%2!=0){

         return x>y?x:y;
     }else if(x%2==0 && z%2==0 && y%2!=0){

         return x>z?x:z;
     }else if(y%2==0 && z%2==0 && x%2!=0){

         return y>z?y:z;
     }else if(x%2==0 && y%2==0 && z%2==0  ){

         return x > y ? (x > z ? x : z) : (y > z ? y : z) ;
     }else{
         return 0;
     }

}

public static void main(String[] args) {

        System.out.println(largestEven(6, 3, 4)); //prints 6
        System.out.println(largestEven(2, 4, 8)); //prints 8
        System.out.println(largestEven(2, 1006, 1003)); //prints 1006

  }

答案 1 :(得分:1)

您在条件中使用了赋值运算符=而不是==相等运算符。请遵循以下逻辑。我还给了它一个优化版本。

当您查看x时,请确保其他变量(y,z)不是divisible by 2,如果他们这样做,那么它们会低于x。然后在其他条件下复制相同的内容。

public int largestEven(int x, int y, int z) {
  if(x % 2 == 0 && ((y % 2 != 0) || (y%2 == 0 && y < x)) && ((z % 2 != 0) || (z % 2 == 0 && z < x))) {
    return x;
  } else if (y % 2 == 0 && ((x % 2 != 0) || (x%2 == 0 && x < y)) && ((z % 2 != 0) || (z % 2 == 0 && z < y))) {
    return y;
  } else if (z % 2 == 0 && ((x % 2 != 0) || (x%2 == 0 && x < z)) && ((y % 2 != 0) || (y % 2 == 0 && y < z))) {
    return z;
  } else {
    return 0;
  }
}

您可以使用之前检查中获得的信息进一步优化条件检查。

public int largestEven(int x, int y, int z) {
  if(x % 2 == 0 && ((y % 2 != 0) || (y%2 == 0 && y < x)) && ((z % 2 != 0) || (z % 2 == 0 && z < x))) {
    return x;
  } else if (y % 2 == 0 && ((z % 2 != 0) || (z % 2 == 0 && z < y))) {
    return y;
  } else if (z % 2 == 0) {
    return z;
  } else {
    return 0;
  }
}

在我们来x时对y进行比较后,我们需要担心x。因为它不能高于y并且可被2整除,所以我们可以从条件中删除它。同样适用于z