我的方法在数组上没有给出正确的维度?

时间:2017-05-04 08:31:28

标签: java arrays multidimensional-array io leap-year

首先抱歉我的英语不好。我制作了自己的日历程序。我只有1个问题。它没有检查正确的闰年。

private final int[][] sizeOfMonth= {
            {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
            {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

这就是我的意见。

public int yearInput(String text){
    String yearNumber = "";
    boolean again = true;
    while (again) {
        System.out.print(text);
        again = false;
        try {
            yearNumber = erfasseText();
            int laenge = String.valueOf(yearNumber).length();

            if (laenge != 4) {
                again = true;
                throw new Exception();
            }
        } catch (Exception e) {
            this.output.yearWrongInput();
        }
    }
    int converter = Integer.parseInt(jahresZahl);
    return converter;

}

这是一个不同的类。

public int readYear() {
            output.yearQuery();
            int year = this.input.yearInput("Year: ");
            return year;
        }

检查闰年的代码。

public int getSizeOfMonth(int year, int month) {
        return this.sizeOfMonth[kalenderFunction.leapYear(year)][month];

    }

我无法在下面更改此代码,因为我的教授告诉我。

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

       // 1 = true it is a leap year
       // 2 = false it is not a leap year
        int leapYear(int year) {
            if (isLeapYear(year)) return 1;
            else return 0;
        }

最后一个是输出部分的缩短代码。

int monthSize= getSizeOfMonth(year, month);
for (int day= 1; day< monthSize; day++) {

            System.out.print(getTwoLetters(day) + "\t");
            if (weekdayInYear == 6) {
                System.out.println();
              // I know the weekdayInYear is not be initialized. thats just for next line.
            }
        }

我希望你能找到问题因为对我而言这段代码看起来很干净。而且我没有发现问题。

输出混淆了我。如果我在输入中键入闰年,我将在28天内获得。 (它必须是arraylist的1而不是0)

现在它让我困惑如果我输入的不是闰年,我会得到27天。 (27为什么)在数组中没有27

的元素
*******************Febuary 2017*******************
Mo  Tue We  Thu Fr  Sa  Su  
        01  02  03  04  05  
06  07  08  09  10  11  12  
13  14  15  16  17  18  19  
20  21  22  23  24  25  26  
27  

我真的希望你能帮助我。我最后的希望。 最好的祝福, Maskuliner

2 个答案:

答案 0 :(得分:2)

你的问题在这个循环的范围内:

for (int day = 1; day < monthSize; day++)

您正在跳过该月的最后一天。

应该是:

for (int day = 1; day <= monthSize; day++)

答案 1 :(得分:1)

这种情况正在发生,因为你这样说:

for(int day= 1; day< monthSize; day++)

如果您的值是,例如30,则计算1,2,...,29。(它必须小于30.)您确实希望使用<=作为比较运算符:< / p>

for(int day= 1; day <= monthSize; day++)