我没有程序做任何事情就改变了对象的布尔值

时间:2013-10-19 08:40:45

标签: java boolean

我已经调试好几个小时了,我终于找到了问题所在。现在我必须解决它:)

我认为发生了一些奇怪的事情。

我正在创建一个日期应用程序,在那里我计算它是哪一天(使用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; 
   }

}

1 个答案:

答案 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)));
    }