2

スケジュールが必要な様々な講義依頼を入力するプログラムを書いています。講義には開始時間と終了時間があります。要件は、講義の最大数をスケジュールすることです。(アルゴリズムは、終了時間までにそれらをスケジュールし、重複しない講義を選択することです-欲張り戦略)。そのために、「lecture」クラスと「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

オブジェクトの配列を割り当てる場合、実際には参照のみを割り当て、オブジェクト自体は割り当てません(C ++などの値型言語とは異なりlecture [] input= new lecture[arraylength] ;、型のオブジェクトは作成されません)。lectureしたがって、アクセスすると:

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

lecture最初にforのインスタンスを作成しなくてもinput[i]、NPEを取得できます。

newこれを解決するには、アクセスを試みる前に、の各オブジェクトで演算子を使用する必要がありますlecture(空のコンストラクターが表示され、定義されていると仮定します)。

input[i] = new lecture();

PS Javaには、タイプ名(タイプlectureであるなど)(大文字で始まる)という規則があります。したがって、名前をに変更lectureすることをお勧めしLectureます。

于 2012-11-04T23:56:10.767 に答える