2

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

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

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

     lecture (int a, int b){
          time[0]=a;
          time[1]=b;        
     }
 }

// 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);
}
4

1 回答 1

6

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

input[i].time[0] = in.nextInt(); 

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

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

input[i] = new lecture();

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

于 2012-11-04T23:56:10.767 回答