4

我有一个任务让学校制作一个程序,结果要么是对的,要么是错的。一年是否是闰年。我目前遇到的问题是我使用的是公共静态布尔值而不是公共布尔值。这是我的代码:

public class Assignment {

    static boolean isLeapYear;

    public static void main(String[] args)
    {        
        int year = 2000;
        isLeapYear(year);
    }
    public static boolean isLeapYear(int year) {
        if (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0))
            isLeapYear = true;

        else
            isLeapYear = false;

        System.out.println(isLeapYear);

        return isLeapYear;
    }
}

目前 int 年是 2000 年,但规则如下:闰年是可以除以 4 的年份,除非该年是新世纪的开始(1700、1800、1900 ......)。因此,即使您可以将 1900 除以 4,您也不能将其除以 400,所以这是错误的。那么问题又来了:我需要做什么才能使用公共布尔值而不是公共静态布尔值?

4

4 回答 4

2

如果要使方法非静态,则需要创建类的实例以从 main 方法调用该方法。然后你可以让你的isLeapYear变量非静态: -

boolean isLeapYear;
public static void main(String[] args)
{        
    int year = 2000;
    new Assigment().isLeapYear(year);
}
public boolean isLeapYear(int year) {
    // access isLeapYear as `this.isLeapYear` or just `isLeapYear`
}

但是,准确地说,您不需要将结果存储在布尔变量中。如果要返回某个表达式的布尔值,则可以只返回该表达式。

因此,只需在您的方法中包含此代码也可以正常工作,并且更具可读性,并且让该方法是静态的:-

return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0))

从您的主要通话中:-

System.out.println("Year : " + year + ", is leap year: " + isLeapYear(year));
于 2012-11-20T20:07:27.337 回答
2

您无需将此结果存储在任何地方。

采用:

public static boolean isLeapYear(int year) 
{
   return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0));
}
于 2012-11-20T20:10:01.360 回答
1

静态方法只能访问静态变量,只有实例方法可以访问实例方法,如果你认为是面向对象的可以推断。

以防万一您应该存储布尔值 isLeapYear

public class Testing {
boolean isLeapYear;

public static void main(String[] args)
{        
    int year = 2000;
    new Testing().isLeapYear(year);
}
public boolean isLeapYear(int year) {
    if (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0))
        isLeapYear = true;

    else
        isLeapYear = false;

    System.out.println(isLeapYear);

    return isLeapYear;
}
}
于 2012-11-20T20:12:24.177 回答
0

您的作业是否说它必须存储在类或实例变量中?如果不是,则不需要public boolean isLeapYearor public static boolean isLeapYear,只需返回计算结果并将其存储在局部变量中,如下所示:

public static boolean isLeapYear(int year) {
    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); 
}

main方法中:

int year = 2000;
boolean isLeap = isLeapYear(year);
System.out.println(isLeap);
于 2012-11-20T20:09:24.447 回答