簡體   English   中英

用Java填充對象數組

[英]Filling an object array in Java

因此,最近(由於受過教育),我從C ++轉到Java,並做了一些練習。 我相信這個問題並不是很聰明,但是我真的需要知道我在做什么錯。

簡單來說,我有3個班級:

  • mainClass
  • 作曲家
  • 音樂會

我的問題在main()中:

public static void main(String[] args) {
    Composer Schubert = new Composer("Franz Schubert", "Classical Music", 6);
    Schubert.getConcert()[1].enterWholeConcertData(); //program just crashes here
}

此后什么也沒有,它只會引發此異常:

線程“ main”中的異常java.lang.NullPointerException at amazing_package.mainClass.main(mainClass.java:16)

注意 :如果我直接從Concert類對象調用enterWholeConcertData(),並且它不是它們的數組(像這樣),則一切工作都很好:

Concert concert = new Concert();
concert.enterWholeConcertData();

Composer具有一個字段,該字段是Concert類的數組和一個int變量,用於定義Concert類中的元素數量(加上默認構造函數,另一個setter / getter,“顯示字段”方法,“輸入整個信息”方法):

public class Composer{
        Composer(String name, String genre, int aNOC)
    {
        this.name = name;
        this.genre = genre;
        this.numberOfConcerts = aNOC;

        this.concert = new Concert[numberOfConcerts];
    }

    private int amountOfSpectators;
    private Concert[] concert;
}

參加作曲家音樂會的吸氣劑

public Concert[] getConcert()
    {
        Concert[] copy = new Concert[this.concert.length];
        System.arraycopy(this.concert, 0, copy, 0, copy.length);
        return copy;
    }        

Concert由(加上設置器/獲取器,“顯示信息”方法,參數構造器)組成:

public class Concert{
    Concert()
    {
        date = "--.--.----";
        amountOfSpectators = 0;
    }

    private String date;
    private int amountOfSpectators;

    public void enterWholeConcertData()
        {
            System.out.println("Enter the date:");

            Scanner sDate = new Scanner(System.in);
            date = sDate.nextLine();
            sDate.close();

            System.out.println("Enter the number of spectators: "
                    + "");

            Scanner sAOW = new Scanner(System.in);
            amountOfSpectators = sAOW.nextInt();
            sAOW.close();
        }
}

抱歉,如果我沒有提到任何重要事項。 您可以向我詢問,我很樂意添加一些新信息。

從我看到的:

public static void main(String[] args) {
    Composer Schubert = new Composer("Franz Schubert", "Classical Music", 6);
    Schubert.get_concert()[1].enterWholeConcertData(); //program just crashes here
}

您創建一個新的Compser,設置其名稱,流派和NoC。 您還初始化了6個元素的數組。

但是,由於尚未初始化數組或Null中的元素。 您至少應該執行以下操作:

Shuber.get_concert()[1] = new Concert();

在調用方法之前,對於其他任何項目也是如此。

您無需初始化Composer.concert數組的任何單個項目。 在這種情況下, Composer.concert數組的每個項目都將初始化為null,這就是為什么要獲取NullPointerException的原因。

引用JLS第4.12.5節:

每個數組組件在創建時都會用默認值初始化

對於所有引用類型,默認值為null

您應該自己初始化Composer.concert數組的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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