在Java中填充对象数组 P>我最近从C++转到了java(由于我的教育),并做了一些练习。我相信这个问题不是很聪明,但我真的需要知道我做错了什么

在Java中填充对象数组 P>我最近从C++转到了java(由于我的教育),并做了一些练习。我相信这个问题不是很聪明,但我真的需要知道我做错了什么,java,arrays,Java,Arrays,简单地说,我有3门课: 主类 作曲家 音乐会 我的问题主要是: 之后什么都不会发生,只会引发以下异常: 线程“main”java.lang.NullPointerException中的异常位于 mainClass.main(mainClass.java:16) 注意:如果我直接从Concert类对象调用enterWholeConcertData(),而不是它们的数组(如下所示),则一切正常: Composer有一个字段,它是Concert类的数组和一个int变量,定义Concert类中元素的

简单地说,我有3门课:

  • 主类
  • 作曲家
  • 音乐会
我的问题主要是:

之后什么都不会发生,只会引发以下异常:

线程“main”java.lang.NullPointerException中的异常位于 mainClass.main(mainClass.java:16)

注意:如果我直接从Concert类对象调用enterWholeConcertData(),而不是它们的数组(如下所示),则一切正常:

Composer有一个字段,它是Concert类的数组和一个int变量,定义Concert类中元素的数量(加上默认构造函数、另一个setters/getter、“show fields”方法、“enter the whole info”方法):

Getter作曲家课堂音乐会:

public Concert[] getConcert()
    {
        Concert[] copy = new Concert[this.concert.length];
        System.arraycopy(this.concert, 0, copy, 0, copy.length);
        return copy;
    }        
Concert包括(加上setter/getter,“show info”方法、参数构造函数):

对不起,如果我没有提到任何重要的事情。你可以问我,我很乐意添加一些新信息。

从我看到的:

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个元素组成的数组

但是,数组中的元素不能为空,因为您尚未初始化它们。 你至少应该做一些类似的事情:

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

在调用上的方法之前,对任何其他项也一样。

您不初始化Composer.concert数组的任何单个项。在这种情况下,
Composer.concert
数组的每一项都将初始化为null,这就是为什么会出现
NullPointerException

引用JLS部分:

每个阵列组件在启动时都使用默认值初始化 创造

对于所有引用类型,默认值为null


您应该自己初始化
Composer.concert
数组的项。

一些注释:您应该接受Java约定(驼峰大小写,变量以小写开头…),除非必要,您应该使用集合而不是数组(例如列表或集合)。@assylias谢谢,我会记住关于习俗的陈述。我被要求用数组来做。哦,没注意到我完全忘记了在构造函数中做这件事-感叹——非常感谢你。我知道我的问题不够聪明。不过,当你在学习时,所有的问题都足够聪明;)
public Concert[] getConcert()
    {
        Concert[] copy = new Concert[this.concert.length];
        System.arraycopy(this.concert, 0, copy, 0, copy.length);
        return copy;
    }        
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
}
Shuber.get_concert()[1] = new Concert();