即使初始化数组,也会出现空指针异常

Man*_*dhe 2 java

我正在编写一个程序来接收需要安排的各种讲座请求.讲座有开始时间和结束时间.要求是安排最大讲座数.(算法是按结束时间安排它们并选择不重叠的讲座 - 贪婪策略).为了做到这一点,我有一个"讲座"课和一个"讲座课程"课程.我创建了一个输入数组(讲座).然后我请求用户输入各种请求.但是我收到错误"线程中的异常"主"java.lang.NullPointerException".请帮助.谢谢.PS:我在"input [i] .time [0] = in.nextInt();"行中有错误的错误.确切的错误是:lecturescheduling.LectureScheduling中线程"main"java.lang.NullPointerException中的异常.

//讲座课..时间[0]是开始时间和时间[1]是讲座的结束时间

 class lecture{
     int[] time= new int[2];

     lecture (int a, int b){
          time[0]=a;
          time[1]=b;        
     }
 }
Run Code Online (Sandbox Code Playgroud)

// LectureScheduling类的一部分

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Input number of lectures ");
    int arraylength = in.nextInt();
    lecture [] input= new lecture[arraylength] ; 
    for (int i=0; i<arraylength; i++){
        System.out.println("Input start time of lecture "+ i);
        input[i].time[0] = in.nextInt();        
        System.out.println("Input end time of lecture "+ i);
        input[i].time[1] = in.nextInt();        
        System.out.println();
    }
    input=SortByStartTime(input);
    input=CreateSchedule(input);
    PrintSchedule(input);
}
Run Code Online (Sandbox Code Playgroud)

ami*_*mit 6

在分配对象数组时,实际上只分配引用,而不是对象本身(lecture [] input= new lecture[arraylength] ;不会创建类型的对象lecture,这与C++等值类型语言不同).因此,当您访问:

input[i].time[0] = in.nextInt(); 
Run Code Online (Sandbox Code Playgroud)

无需首先创建lecturefor 的实例input[i],您将获得NPE.

要解决它,您需要在尝试访问它之前new在每个对象上使用运算符lecture(假设空构造函数是可见的并且已定义):

input[i] = new lecture();
Run Code Online (Sandbox Code Playgroud)

PS在java中有一个类型名称(例如lecture,类型)的约定- 以大写字母开头.所以我建议重命名lectureLecture.