错误消息“运算符‘&&’无法应用于 'int' 'boolean'

Error message "Operator '&&' cannot be applied to '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 个给定数字中找出最大的偶数。但是我似乎无法让它工作,因为我不断收到此错误消息。我到底做错了什么?

对于新手问题,我深表歉意,但我以前从未见过此错误消息,也不知道它是什么意思或如何解决它。

提前致谢。

你必须使用==来比较&使用=来赋值

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

在您的 ifelse if 语句中,您有以下几行:

x % 2 = 0

试试改成这个

x % 2 == 0 // Multiple ==

单个=用于赋值,像这样:

int i = 0;

还有两个 == 用于比较 ifelse if:

if (i == 0){
    ...
}

if 中的语句是一个布尔值。这将完全相同,但首先将其分配给 boolean

boolean x = (i == 0);
if (x){ // OR if (x == true){
    ...
}

我希望现在区别很明显。我还建议多了解一下 Java 或一般编程的基础知识。

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

当您查看 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.

也类似

您必须针对每个条件检查个体和组中的偶数和奇数条件,然后检查最大和 return。

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

  }