我已经调试好几个小时了,我终于找到了问题所在。现在我必须解决它:)
我认为发生了一些奇怪的事情。
我正在创建一个日期应用程序,在那里我计算它是哪一天(使用leapyear更正等)。
我有一个方法,我拿一个Year对象。
private int totalDays(Year yearnumber) {
System.out.println("Boolean check 1: " + yearnumber.getLeapYear());
//calculate days for whole year//
int daysWholeYear = 0;
for (int i = year.getYearZero(); i < yearnumber.getYear(); i++) {
// here i will add all the days (366) from the leapyears //
if (yearnumber.isLeapYear(i) == true) {
totalDays += year.getLengthyear() + 1;
System.out.println("Boolean check 2: " + yearnumber.getLeapYear());
} else {
totalDays += year.getLengthyear();
}
}
System.out.println("Boolean check 3: " + yearnumber.getLeapYear());
我的前两个布尔检查没问题。
代码(没有在for循环中循环检查)
Boolean check 1: true
Boolean check 2: true
Boolean check 3: false
我需要在我的方法的下一行中使用我的布尔值,在那里我计算月份的天数(非整年)。但是,我的程序现在认为这一年不是闰年,因此进行了错误的计算。
因为这个布尔值在我的程序中发生了变化,所以我计算的其余部分都是关闭的。有人能解释我为什么会这样吗? :)
编辑:我年级的代码:
public class Year {
private static int yearzero = 1753;
private static int lengthYear = 365;
private int year;
private boolean leapYear;
private int startYear; //are used for an interval calculations
private int eindYear; //
public Year(int year) {
this.year = year;
this.leapYear = isLeapYear(year);
}
boolean isLeapYear(int year) {
return leapYear = (year % 400 == 0) ||
((year % 100) != 0 && (year % 4 == 0));
}
public int getYear(){
return year;
}
public int getYearzero () {
return yearZero;
}
public int getLengthYear() {
return lengthYear;
}
public boolean getLeapYear() {
return leapYear;
}
}
答案 0 :(得分:3)
您的isLeapYear
函数设置对象的leapYear
变量。这是因为yearnumber.isLeapYear(i) == true
将失败,yearnumber.leapYear
将设置为false
。
更改
boolean isLeapYear(int year) {
return leapYear = (year % 400 == 0) ||
((year % 100) != 0 && (year % 4 == 0));
}
为:
boolean isLeapYear(int year) {
return ((year % 400 == 0) ||
((year % 100) != 0 && (year % 4 == 0)));
}