我将此代码编写为项目的一部分,这似乎并不是最有效的。是否有更简洁的方法来编写此方法?
public static int numberMonth(int parseMonth, Boolean leapYear)
{
int month = 0;
if (parseMonth < 1)
{ month = 0;
if (parseMonth < 2)
{ month =+ 31;
if (parseMonth < 3)
{
if (leapYear)
{
month =+ 29;
}
else if(!(leapYear))
{
month=+28;
if (parseMonth < 4)
{
month =+ 30;
if (parseMonth < 5)
{
month =+ 31;
if (parseMonth < 6)
{
month =+ 31;
if (parseMonth < 7)
{
month =+ 30;
if (parseMonth < 8)
{
month =+ 31;
if (parseMonth < 9)
{
month =+ 31;
if (parseMonth < 10)
{
month =+ 30;
if (parseMonth < 11)
{
month =+ 31;
if (parseMonth < 12)
{
month =+31;
}
}
}
}
}
}
}
}
}
}
}
}
}
答案 0 :(得分:1)
codaddict,我认为这几乎是正确的。我认为他正试图在一年中增加几天,所以你只需要把你的日期变量放到一个循环中:
public static int numberMonth(int parseMonth, String leapYear)
{
if(parseMonth<1 || parseMonth>12) {
return 0;
}
int[] monthArray = {31,28,31,30...};
int days = monthArray[0];
for (int ii = 1; ii < parseMonth; ii++) {
days += monthArray[parseMonth];
}
if (leapYear.equals("leap") && parseMonth > 1) {
days++;
}
return days;
}
但我认为OP应该看看日历。检查此主题中的几个答案:Calculate days in year
答案 1 :(得分:1)
您的原始代码存在很多问题。它没有返回一个值(你显然打算返回month
,但编译器不知道它。它不会达到你想要它的任何代码。还有其他问题,而while他们不会让你的代码无法工作,他们会阻止任何人理解它。parseMonth
是什么意思?leapYear
是什么意思?为什么名为month
的变量包含更大的值?比一年中的月数?没有任何评论可以解释这一点。
如果我正在写这个函数,我会写下面的内容(基于AndyMac的代码稍加修改):
public static int numberOfDaysBeforeMonth(int monthNumber, boolean leapYear)
{
//if monthNumber is out of range, return -1
if(monthNumber< 1 || monthNumber > 12)
return -1;
int[] daysPerMonth= {31,28,31,30,31,30,31,31,30,31,30,31};
int numberOfDays = 0;
//add up the days in the months preceding the month in question
for (int month = 1; month < monthNumber; month++)
numberOfDays += daysPerMonth[month - 1];
//add an extra day if it was a leap year and the month is after February
if (leapYear && monthNumber > 2)
numberOfDays++;
return numberOfDays;
}
答案 2 :(得分:0)
你去,顺便说一句,代码不起作用。 impl。是基于所以如果parseMonth = 4那么月= 31 + 28 + 31 。
这个想法是你能得到的最简单的,不要在运行时总结任何东西,在初始化期间做一次。您可以手动初始化days[]
,但我希望现在已经很清楚了。
package t1;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class MonthyDays {
static final int[] days;
static{
int first = 1;//should be zero for decent logic
days=new int[first+Calendar.UNDECIMBER];
GregorianCalendar c=new GregorianCalendar();
c.set(1999, 0, 1, 0, 0,0);//use some non leap year
for (int i=Calendar.JANUARY;i<Calendar.UNDECIMBER;i++){
days[first+i] = c.get(Calendar.DAY_OF_YEAR)-1;
c.add(Calendar.MONTH, 1);
}
}
public static int numberMonth(int parseMonth, String leapYear){
if (parseMonth<=0 || parseMonth>12)
return 0;//should be IndexOutOfBounds; i.e. the chech should be removed;
int day = days[parseMonth];
if (parseMonth>2 && "leap".equals(leapYear))//avoid NPE
day++;
return day;
}
public static void main(String[] args) {
System.out.println(numberMonth(2, "leap"));
System.out.println(numberMonth(3, "leap"));
System.out.println(numberMonth(1, "leap"));
System.out.println(numberMonth(1, "leap"));
System.out.println(numberMonth(12, ""));
System.out.println(numberMonth(12, "leap"));
}
}