有没有更好的方法为java编写此代码?还是让它更干净?

时间:2011-03-26 16:37:34

标签: java syntax methods if-statement

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

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

3 个答案:

答案 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"));

    }
}