2012-11-04 42 views
2

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

//讲座类..时间[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); 
} 

回答

6

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

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

没有先为input[i]创建lecture一个实例,你就会得到一个NPE。

为了解决它,你需要您尝试访问之前使用new运营商的lecture每个对象(假设空的构造是可见的,定义):

input[i] = new lecture(); 

附:在java中有一个类型名称的约定(如lecture,这是一种类型) - 以大写字母开头。所以我建议将lecture重命名为Lecture

+0

因此,这意味着在for循环中,我将首先初始化输入[i],然后接受输入? –

+0

@ user1683651:是,或作为预处理,在不同的for循环中(在访问数据的for循环之前) – amit

+0

,有很多帮助。 –