我正在编写一个程序来接收需要安排的各种讲座请求.讲座有开始时间和结束时间.要求是安排最大讲座数.(算法是按结束时间安排它们并选择不重叠的讲座 - 贪婪策略).为了做到这一点,我有一个"讲座"课和一个"讲座课程"课程.我创建了一个输入数组(讲座).然后我请求用户输入各种请求.但是我收到错误"线程中的异常"主"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)
在分配对象数组时,实际上只分配引用,而不是对象本身(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,类型)的约定- 以大写字母开头.所以我建议重命名lecture为Lecture.