2015-05-11 54 views
1

嗨我是相当新的Java,我正在处理作为日历工作的代码。我以为我已经完成了它,但日子似乎仍然是31,而不是根据if/else语句改变。这里是代码:为什么我的int值不会改变?

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

你缺少'iMonth = month'任务 –

+0

或者只是消除'iMonth'并使用'month'来代替。 –

+1

这是一个非常好的机会,可以熟悉使用调试器。使用Java调试器,您可以在执行时逐行执行代码,并观察运行时值和行为。这将允许您确定您的逻辑是否按预期工作,并具体找到它所做的事情。发生这种情况时可以看到运行时间值。哪些信息可供您用来诊断问题以及我们如何帮助您。 – David

回答

1

iMonth的用途是什么?您将它初始化为0,然后测试它就好像它已经代表了一个月。

你不需要iMonth;请在if测试中使用month

此外,您的闰年测定不太正确。如果年份数字可以被400整除,那么它总是闰年。尝试

boolean A = (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)); 

您可能还需要一个更具描述性的变量名,如isALeapYear

+0

感谢您的帮助。闰年信息也很有用:) – Edwards

0

可能的解决方案:

替换所有iMonthmonth - 您可以通过方法的参数提供的变量。

2.调用maxDaysInMonth(int year, int month)方法是这样 -

maxDaysInMonth(2015, 1); // for January 
maxDaysInMonth(2015, 2); // for February 
maxDaysInMonth(2015, 11); //for December 
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; 
} 
相关问题