2

我仍在学习 Java,但遇到了错误。有人可以帮助解决如何做到这一点的最佳方法。

    import java.util.Scanner;

    public class LeapYear2 {

    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int year;
    year = scan.nextInt();
    boolean boolVar1,boolVar2,boolVar3;
    boolVar1 = (year / 4);
    boolVar2 = (year / 100);
    boolVar3 = (year / 400);
    if (boolVar1 == true && boolVar2 == true && boolVar3 == true)
    {
        System.out.println("This is a leap year.");
    }
    else if (boolVar1 == true && boolVar2 == true && boolVar3 != true)
    {
        System.out.println("This is not a leap year.");
    }
    else if (boolVar1 == true)
    {
        System.out.println("This is a leap year.");
    }
    else
    {
        System.out.println("This is not a leap year.");
    }
    }

    }
4

6 回答 6

4

如果你想知道一个int值是否可以被另一个整除,你可以这样做:

boolVar1 = year % 4 == 0;
boolVar2 = year % 100 == 0;
boolVar3 = year % 400 == 0;

在 Java 中,整数和布尔值是不可互换的(与 C 等语言不同,其中 0 为假,任何非零值都被视为真)。您需要使用比较运算符,例如==. 运算符是余数函数,它(从你的代码的%其余部分)看起来像你想要使用的。

PS 将来,当您询问如何处理错误时,如果您在问题中发布错误消息将非常有帮助。

PPS 你应该养成给变量起有意义的名字的习惯。例如,我将替换boolVar1divisibleBy4等。当您开始编写更复杂的代码时,这将为您省去很多麻烦。

此外,正如其他人指出的那样,使用boolean变量b,推荐的 Java 风格是使用

if (...b...)

代替

if (...b == true...)

if (...!b...)

代替

if (...b == false...)
于 2013-08-25T19:21:05.000 回答
1

您不需要所有这些布尔值。您可以简单地测试:

if ((year % 4 == 0) && (year % 100 != 0)){
    System.out.println(year + " is a leap year.");
}
else if (year % 400 == 0){
    System.out.println(year + " is a leap year.");
}
else {
    System.out.println(year + " is not a leap year.");
}
于 2013-08-25T19:21:54.353 回答
1

你需要一个明确的比较来做一个表达式boolean。您不需要与trueon进行显式比较boolean,因此代码应如下所示:

boolean boolVar1,boolVar2,boolVar3;
boolVar1 = (year % 4) == 0;
boolVar2 = (year % 100) == 0;
boolVar3 = (year % 400) == 0;
if (boolVar1 && boolVar2 && boolVar3)
{
    System.out.println("This is a leap year.");
}
else if (boolVar1 && boolVar2 && !boolVar3)
{
    System.out.println("This is not a leap year.");
}
else if (boolVar1)
{
    System.out.println("This is a leap year.");
}
else
{
    System.out.println("This is not a leap year.");
}

请注意boolVar != trueboolVar == false等价于!boolVar

于 2013-08-25T19:24:01.967 回答
1

为此使用模数方法。

if(year % 4 == 0){
    System.out.println("This is a leap year.");
}

等等。据我所知,您不需要为此声明 3 个单独的 int 类型。只需在每个条件语句中重用它。

于 2013-08-25T19:24:21.853 回答
0

而不是计算这么多条件,只需输入以下代码

if(year%4==0)
System.out.println("The given year is leap year");
else
System.out.println("The given year is not leap year");

没有你在 int 值和布尔值之间陷入困境的情况。

于 2013-08-25T19:24:02.207 回答
0

使用此代码

boolVar1 = (year % 4) == 0;
boolVar2 = (year % 100) ==0;
boolVar3 = (year % 400) == 0; 

请注意,原始版本可以在 C 中运行。

于 2013-08-25T19:25:17.660 回答