有没有更好的方法来编写这个java代码? 还是让它更干净?

我将此代码编写为项目的一部分,这似乎并不是最有效的。 是否有更简洁的方法来编写此方法?

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; } } } } } } } } } } } } } 

您的原始代码存在很多问题。 它没有返回一个值(你显然打算返回month ,但是编译器不知道它。它不会达到你想要它的任何代码。还有其他问题,虽然它们不会保持你的代码不工作,他们会阻止任何人理解它parseMonth是什么意思? parseMonth是什么意思?为什么一个名为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; } 

codaddict,我认为这几乎是正确的。 我认为他正试图在一年中添加几天,所以你只需要把你的days变量放到循环中:

 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应该看看日历。 检查此主题中的几个答案: 计算一年中的天数

在那里你去,顺便说一句,代码不起作用。 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;i12) return 0;//should be IndexOutOfBounds; ie 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")); } }