gpt4 book ai didi

JAVA 在 "if"语句中出现空指针异常?

转载 作者:行者123 更新时间:2023-12-01 17:37:11 24 4
gpt4 key购买 nike

public void display(Date date) {
boolean loop = true;
System.out.println("Events on " + date.toString());
for (int i = 0; i < schedule.length; i++) {
while (loop) {
Date tmp = schedule[i].nextOccurrence();
if (tmp.compareTo(date) == 0) {
System.out.println(schedule[i].nextOccurrence().toString());
}
}
schedule[i].init();
}
}

如果事件发生在给定方法的日期,上面的内容应该打印出事件的发生。 nextOccurrence 方法获取下一次发生的事件(如果是每周或每天)。 DailyEvent 的 nextOccurence 看起来像这样:

public Date nextOccurrence() {
if (timesCalled == recurrences) {
return null;
}
else {
Calendar cal = Calendar.getInstance();
cal.setTime(startTime);
cal.add(Calendar.DATE, timesCalled);
timesCalled++;
return cal.getTime();
}
}

我调用schedule[i].init()将调用次数重置为0(每日事件有调用次数的限制,用变量recurrences表示为int)。

基本上,我的问题是我在这一行收到 NullPointerException:

if (tmp.compareTo(date) == 0) {

我已经尝试了一切,但我完全迷失了。任何帮助都会很棒!

最佳答案

您的方法nextOccurence可能返回null,您需要检查:

if (tmp != null && tmp.compareTo(date) == 0) {

此外,您的 loop 变量永远不会设置为 false 并且会导致无限循环...并且您调用 nextOccurrence() 两次在你的循环内;这是想要的吗?

您可能会考虑重新设计您的 getNextOccurence() 并让您的 schedule 类实现 iterator为了你的约会。这将改变你的循环

Iterator<Date> iterator = schedule[i].occurenceIterator();
Date tmp;
while (iterator.hasNext()) {
tmp = iterator.next();
if (tmp.compareTo(date) == 0) {
System.out.println(tmp.toString());
}
}

这比您正在使用的更干净。

关于JAVA 在 "if"语句中出现空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5129623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com