我有一个学校的任务,要做一个导致真或假的程序。这是关于一年是否是闰年。我现在遇到的问题是我使用的是公共静态布尔值而不是公共布尔值。 这是我的代码:
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年,但规则是这样的: 除非年份是新世纪的开始(1700,1800,1900 .....),否则闰年可以除以4。因此,即使你可以将1900除以4,也不能将它除以400,因此它是假的。 所以问题是:我需要做什么才能使用公共布尔值而不是公共静态布尔值?
答案 0 :(得分: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));
答案 1 :(得分:2)
您无需将此结果存储在任何位置。
使用:
public static boolean isLeapYear(int year)
{
return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0));
}
答案 2 :(得分: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;
}
}
答案 3 :(得分:0)
你的作业是否说它必须存储在类或实例变量中?如果没有,则不需要public boolean isLeapYear
或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);