首先抱歉我的英语不好。我制作了自己的日历程序。我只有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
答案 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++)