改变静态布尔值
Posted
技术标签:
【中文标题】改变静态布尔值【英文标题】:Changing static boolean 【发布时间】:2012-11-08 23:48:17 【问题描述】:我有一个任务让学校制作一个程序,结果要么是对的,要么是错的。一年是否是闰年。我目前遇到的问题是我使用的是公共静态布尔值而不是公共布尔值。 这是我的代码:
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,所以这是错误的。 那么问题又来了:我需要做什么才能使用公共布尔值而不是公共静态布尔值?
【问题讨论】:
要使用公共布尔值,您需要创建一个对象。 【参考方案1】:如果你想让你的方法不是静态的,你需要创建你的类的一个实例来从你的主方法调用那个方法。然后你可以让你的 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));
【讨论】:
@Downvoter.. 请发表评论。我已经回答了 OP 提出的问题:-What do I need to do so i'm able to use a public boolean instead of a public static boolean?
。请在投票前阅读问题?而且我认为这个答案真的不需要反对。【参考方案2】:
您无需将此结果存储在任何地方。
用途:
public static boolean isLeapYear(int year)
return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0));
【讨论】:
当然这是一个很好的建议,但它并不能真正回答 OP 的要求。他在问如何使用non-static
方法而不是static method
。【参考方案3】:
静态方法只能访问静态变量,只有实例方法可以访问实例方法,如果你认为是面向对象的可以推断。
以防万一您应该存储布尔 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;
【讨论】:
【参考方案4】:您的作业是否说它必须存储在类或实例变量中?如果没有,则不需要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);
【讨论】:
以上是关于改变静态布尔值的主要内容,如果未能解决你的问题,请参考以下文章