我正在编写一个程序来接收需要安排的各种讲座请求。 讲座有开始时间和结束时间。 要求是安排最大讲座数。 (算法是按结束时间安排它们并选择不重叠的讲座 - 贪婪策略)。 为了做到这一点,我有一个“讲座”课和一个“讲座课程”课程。 我创建了一个输入数组(讲座)。然后我请求用户输入各种请求。 但是我收到错误“线程中的异常”主“java.lang.NullPointerException”。 请帮助。 谢谢。 PS: 我在“input [i] .time [0] = in.nextInt();”行中激动地发出错误。 确切的错误是: 线程“main”java.lang.NullPointerException中的异常 在lecturescheduling.LectureScheduling.main(LectureScheduling.java:116)
//讲课班..时间[0]是开始时间[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);
}
答案 0 :(得分:6)
分配对象数组时,实际上只分配引用,而不是对象本身(lecture [] input= new lecture[arraylength] ;
不会创建类型为lecture
的对象,这与C ++等值类型语言不同)。因此,当您访问:
input[i].time[0] = in.nextInt();
无需先为lecture
创建input[i]
的实例,即可获得NPE。
要解决此问题,您需要在new
的每个对象上使用lecture
运算符,然后再尝试访问它(假设空构造函数可见并已定义):
input[i] = new lecture();
P.S。在java中有一个类型名称的约定(例如lecture
,它是一种类型) - 以大写字母开头。因此,我建议将lecture
重命名为Lecture
。