如何避免在我的情况下返回null?

时间:2016-10-16 15:08:48

标签: java null switch-statement try-catch try-catch-finally

我需要编写一个Java程序(类Date)和"类NextDay,它通过输入日,月和年来计算和打印第二天的日期。"

public Date getNextDay()方法中,我必须使用return null,否则会出错。我怎样才能避免返回null?

这是我的代码;

public class Date {
    private int day;
    private int month;
    private int year;


    public Date(int day, int month, int year){
        this.day = day;
        this.month = month;
        this.year = year;
    }


    public int getMaxDaysInMonth()
    {
        int daysInMonth = 0;
        switch(month)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                daysInMonth = 31;
                break;
            case 2:
                if(isLeapYear())
                {
                    daysInMonth = 29;
                }
                else
                {
                    daysInMonth = 28;
                }
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                daysInMonth = 30;   
        }

        return daysInMonth;
    }



    public Date getNextDay(){
        try {
            if(day < getMaxDaysInMonth()){
                return new Date(day + 1, month, year);
            }
            else if(day == getMaxDaysInMonth() & month < 12){
                return new Date(1, month+1, year);
            }
            else if(day == getMaxDaysInMonth() & month == 12){
                return new Date(1, 1, year+1);
            }
        } catch (Exception e) {
            System.out.println("You have entered an invalid Date.");
            e.printStackTrace();

        }
        return null;
    }




    public int getDay(){
        return day;
    }

    public int getMonth(){
        return month;
    }

    public int getYear(){
        return year;
    }

    public boolean isLeapYear(){
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }

    public String toString(){
        return this.day + "." + this.month + "." + this.year;
    }
}




public class NextDay {

           public static void main(String args[]) throws Exception{
              Date dateObj = new Date(28, 2, 2015);
              System.out.println("Old Date: " + dateObj.getDay() + "." + dateObj.getMonth() + "." + dateObj.getYear() + ".");
              System.out.println("The next day is " + dateObj.getNextDay().toString() + ".");
           }
}

3 个答案:

答案 0 :(得分:3)

使用局部变量并分配它并在方法结束时返回,如果可以提高性能,则可以在代码中使用跳转语句

public Date getNextDay(){
            Date date = new Date();
            try {
                if(day < getMaxDaysInMonth()){
                    date= new Date(day + 1, month, year);
                }
                else if(day == getMaxDaysInMonth() & month < 12){
                    date = new Date(1, month+1, year);
                }
                else if(day == getMaxDaysInMonth() & month == 12){
                    date = new Date(1, 1, year+1);
                }
            } catch (Exception e) {
                System.out.println("You have entered an invalid Date.");
                e.printStackTrace();

            }
            return date;
        }

答案 1 :(得分:2)

我建议抛出异常。作为例外的一部分,你也可以给出一些关于是/错的解释。

返回特定日期不是一个好主意,因为此日期也可以匹配以有效方式创建的日期。即可以毫无问题地创建日期01-01-1970,对吧?所以它不应该作为问题的类型或标记返回。

关于您的日期表示,请记住,您可以使用Integer.MAX_VALUE为月,日和年初始化日期。在这种情况下,预期产量是多少?

答案 2 :(得分:1)

我建议您过去返回日期并避免返回null。