[英]Problems using ArrayList with Inheritance
我一直在嘗試實現一個超類,以減少程序中的代碼長度。 該程序是一項活動計划程序,用戶可以在其中決定是否要輸入家庭,學校或其他活動。 現在,我試圖將一個部分完成的實例添加到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在我的活動類中:
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
我相信您的問題出在startTime.setDate(month, day, year, hour, minute);
您確定startTime是否已初始化?
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
它,然后再訪問其屬性(或在對象上調用方法-您仍然可以將arround作為參數c傳遞給它)
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
類的不同,可能沒有構造函數而沒有參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.