簡體   English   中英

將ArrayList與繼承一起使用時出現問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM