我一直在尝试实现一个超类来减少程序中的代码长度。该程序是一个活动计划器,用户将决定是否要输入家庭,学校或其他活动。现在,我正在尝试将部分完成的实例添加到ArrayList,然后我尝试访问该部分完成的实例并为其指定开始时间和结束时间。以下是一些代码:
ArrayList由:ArrayList<Activity> aList = new ArrayList();
主要方法:
System.out.println("*****************");
System.out.println("**Home Activity**");
System.out.println("*****************");
System.out.println("\n** Name **");
String tempName = keyboard.nextLine();
System.out.println("**Description **");
String tempDescr = keyboard.nextLine();
aList.add(new Activity(tempName, tempDescr, "Home"));
main.startTime(aList, listCount); // This line is where I get my error
main.endTime(aList, listCount);
// Methods aren't static so I need instance of class (main)
再往下是我的startTime方法:
// Creates a startTime for the instance
public void startTime(ArrayList<Activity> list, int listCount)
{
DayPlanner main = new DayPlanner();
System.out.println("\n******Start Time*******");
int intYear = main.yearInput();
String tempMonth = main.monthInput();
int intDay = dayInput();
int intHour = hourInput();
int intMinute = minuteInput();
list.get(listCount).setStart(tempMonth, intDay, intYear, intHour, intMinute);
// Line above is also where I get my error
}
setStart在我的Activity Class中:
public class Activity {
protected String type;
protected String activityName;
protected Time startTime; // Default Time
protected Time endTime; // Default Time
protected String activityDescription;
public void setStart(String month, int day, int year, int hour, int minute)
{
this.startTime.setDate(month, day, year, hour, minute);
}
setDate在我的时间等级中:
public void setDate(String month, int day, int year, int hour, int minute)
{
if (dateOK(month, day, year, hour, minute))
{
this.month = month;
this.day = day;
this.year = year;
this.hour = hour;
this.minute = minute;
}
else
{
System.out.println("Improper date set. Please try again.");
System.exit(0);
}
}
我为跳来跳去道歉,但我似乎无法弄清楚我做错了什么!我遇到的问题是 NullPointerException 。
这是我的错误的输出。正如您所看到的,我只能在我的开始时间结束时输入,因此当我尝试将开始时间分配给ArrayList中的元素时,会发生一些事情。
******Start Time*******
** Year **
2000
** Month **
august
** Day **
09
** Hour **
5
** Minute **
61
Not valid minute. Range is [0-59].
** Minute **
59
Exception in thread "main" java.lang.NullPointerException
at pkg2430ass1.Activity.setStart(Activity.java:50)
at pkg2430ass1.DayPlanner.startTime(DayPlanner.java:304)
at pkg2430ass1.DayPlanner.main(DayPlanner.java:50)
Java Result: 1
答案 0 :(得分:0)
我相信您的问题出在startTime.setDate(month, day, year, hour, minute);
您确定startTime是否已初始化?
答案 1 :(得分:0)
protected Time startTime; // Default Time
protected Time endTime; // Default Time
protected String activityDescription;
public void setStart(String month, int day, int year, int hour, int minute)
{
this.startTime.setDate(month, day, year, hour, minute);
}
您所概述的内容Default Time
不是这样的。只有declared
的每个对象都是null
。你需要initialize
之前,先判断它的属性(或者在对象上调用方法 - 你仍然可以将它作为参数传递给它)
protected Time startTime
是声明
protected Time startTime = new Time();
是一个声明,后跟初始化。在初始化对象之前,它是null
,除非已为该声明分配了值,否则不能用于访问。
如果你不想初始化一个对象,除非你真的需要它,你应该考虑使用:
public void setStart(String month, int day, int year, int hour, int minute)
{
if (this.startTime == null){
this.startTime = new Time();
}
this.startTime.setDate(month, day, year, hour, minute);
}
ps。:根据您使用的Time
类的类型,可能没有没有参数的构造函数。