您好我是java的新手,我正在处理作为日历的代码。我以为我已经完成了它但是日子似乎仍然是31而不是基于if / else语句进行更改。这是代码:
public int maxDaysInMonth( int year, int month )
{
boolean A = (year % 4 == 0) || ((year%4==0) && (year % 100 != 0));
int days = 0;
int iMonth = 0;
if( iMonth == 4 || iMonth == 6 || iMonth == 9 || iMonth == 11)
{
days = 30;
}
else if ( iMonth == 1 || iMonth == 3 || iMonth == 5 || iMonth == 7 || iMonth == 8 || iMonth == 10 || iMonth == 12)
{
days = 31;
}
if (A == true && iMonth == 2)
{
days = 29;
}
else if (A == false && iMonth == 2)
{
days = 28;
}
return days;
}
非常感谢任何帮助!
答案 0 :(得分:1)
iMonth
的目的是什么?您将其初始化为0
,然后对其进行测试,就好像它已经代表了一个月。
您不需要iMonth
;只需在month
测试中使用if
。
此外,您的闰年测定不太正确。如果年份数可以被400
整除,那么它总是闰年。尝试
boolean A = (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0));
您还可能需要更具描述性的变量名称,例如isALeapYear
。
答案 1 :(得分:0)
可能的解决方案:
1。将所有iMonth
替换为month
- 您通过方法参数提供的变量。
2。像这样调用maxDaysInMonth( int year, int month )
方法 -
maxDaysInMonth( 2015, 1); // for January
maxDaysInMonth( 2015, 2); // for February
maxDaysInMonth( 2015, 11); //for December
答案 2 :(得分:0)
像其他人一样提到你的问题是iMonth
尝试使用简单的类似代码:
public int maxDaysInMonth(int year, int month) {
int days;
switch (month) {
case 2:
boolean A = (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0));
days = A ? 29 : 28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = 31;
}
return days;
}