为什么需要== 0,当我删除它时会出现错误“对于参数类型int,布尔值,运算符&&未定义”

时间:2019-01-20 15:02:55

标签: java

好吧,所以我在寻找某人的code年检查器代码,我想知道为什么他/她在%%4之后马上放== 0。为什么在这里使用modulo(%)。如果您使用a cacculator要找到year年,您需要使用divide(/)来举例说明2000/4 = 500,这样它将使2000成为leap年。.

import java.util.Scanner;

public class LeapChecker {
    public void Check(){
        Scanner input = new Scanner(System.in);

        System.out.println("Type a year: ");
        int year = input.nextInt();

        if (year % 4 ==0 && (year % 100 !=0)){
            System.out.println("The year is a leap year.");
        }else if (year % 4 ==0 && (year % 100 ==0) && (year % 400 ==0) ){
            System.out.println("The year is a leap year.");
        }
        else {
            System.out.println("The year is not a leap year.");
        }

    }

    public static void main(String[] args) {
         LeapChecker leap = new LeapChecker();
        leap.Check();
    }
}

4 个答案:

答案 0 :(得分:3)

year % 4的结果是int

&&运算符(和||)仅针对布尔操作数或可以自动转换为布尔值的操作数(这意味着也可以使用Boolean)定义。

来自language spec

  

条件和运算符的每个操作数必须为布尔型或布尔型,否则会发生编译时错误。

没有从intboolean的隐式转换(不同于其他语言,如C,C ++,Python等)。这是一件好事:它会迫使您明确说明转化情况。

因此,您必须自己进行int到boolean转换-例如,使用诸如==>=<等的关系运算符,或通过传递{{ 1}}的方法返回一个布尔值。

答案 1 :(得分:2)

如果e | AW(0, e) AE(0, e) AW(1, e) AE(1, e) AW(2, e) --+------------------------------------------------- 5 | 0 0 0 20 20 4 | 7 7 7 23 24 = max(20 + 1 * 4, 23 + 0 * 4) 3 | 14 14 14 26 28 2 | 21 21 21 29 32 1 | 28 28 28 32 36 0 | 35 35 35 35 40 可以除以4(2012年,2016年,2020年,...),则可以简单地将year % 4计算为0。

year等于1,因为整数相除后余数为1。 9 % 4等于2,10 % 4等于3,11 % 4等于0

答案 2 :(得分:2)

当您使用计算器除以4时,您知道如果得到整数答案,则年份可以除以4,这在编程语言中类似,模运算符用于除以零后的余数,如果余数为零(余数== 0),则该数字可被4整除。

并且&&运算符是一种检查所有围绕它的条件是否为true的条件,但条件是肯定的。它必须由条件或技术上布尔(真/假)值或文字包围。并且以模为模的返回值,即0或1或2或3(在这种情况下)不是布尔值。

答案 3 :(得分:1)

year % 4 ==0将返回boolean值,年份%4将返回int值。对于if条件,您需要放置一个boolean表达式。

除年份后,year % 4将给您余数。因此,您在这里检查它是否等于0。在编程过程中,检查该数字是否可被4

整除的方式