0

我正在尝试从字符串中设置并返回最早的日期,并且我认为在设置日期时我遗漏了一些东西,因为每当我尝试设置 Date 的值时,我都会不断收到 nullreferenceexception。谢谢你的帮助

private static Date createDate(String input)
{
    Date date = null;

    if (input == null)
        return null;

    // Split formatted input into separate values
    String tempDates[] = input.split(dateSep);

    // Store values as integers
    int[] dateValues = {0, 0, 0};
    dateValues[0] = Integer.parseInt(tempDates[0]);
    dateValues[1] = Integer.parseInt(tempDates[1]);
    dateValues[2] = Integer.parseInt(tempDates[2]);

    // Sort integers from lowest to highest
    Arrays.sort(dateValues);

    // Set return date
    date.setMonth(dateValues[0]);
    date.setDate(dateValues[1]);
    date.setYear(dateValues[2]);


    System.out.println(date);
    // Checking basic date restrictions
    if (date.getMonth() <= 0 || date.getMonth() > 12)
        throw new IllegalArgumentException("Month is not valid " + month);

    if (date.getDay() <= 0 || date.getDay() > 31)
        throw new IllegalArgumentException("Day is not valid " + day);

    if (date.getYear() <= 0)
        throw new IllegalArgumentException("Year is not valid " + year);


    return date;
}

}
4

4 回答 4

2

您需要初始化Date对象。
将此行更改Date date = null;Date date = new Date();

通常你会得到NullPointerException

在需要对象的情况下尝试使用 null 时。其中包括:
1.调用空对象的实例方法。
2.访问或修改空对象的字段。
3.把null的长度当成一个数组。
4.像数组一样访问或修改null的槽。
5. 将 null 视为 Throwable 值。

于 2013-08-28T19:09:15.733 回答
1

你写了Date date = null;

你用null.

并在 上进行操作null

你要做的是

date = ..evaluate value here....

或者正如其他人提到的,分配new Date()给它并做一些事情。

 date.setMonth(dateValues[0]);
于 2013-08-28T19:08:40.577 回答
0

您尚未初始化变量date。要查看初始化它,请查看以下帖子:http ://www.tutorialspoint.com/java/java_date_time.htm

date = new Date();

或者

//The following constructor accepts one argument that equals the number of milliseconds that // have elapsed since midnight, January 1, 1970
date = new Date(long millisec);

我希望这有帮助。

于 2013-08-28T19:10:52.793 回答
0

正如所有其他答案所述,您需要初始化date,否则您将始终得到空指针/引用异常:

     date = new Date()

此外,对数组进行排序并不能确保您的代码符合预期的月/日/年格式:

    date.setMonth(dateValues[0]);
    date.setDate(dateValues[1]);
    date.setYear(dateValues[2]);

即使我知道您想从字符串中检索最早的日期,最好直接使用tempDate验证这些限制

于 2013-08-28T20:42:17.657 回答