2017-01-04 3 views
-1

なぜコンパイルされませんか?私は、intという属性の学校のリストを並べ替えようとしています:courseLevel、昇順。ソートエラーの修正

私はUCFCourseという名前のクラスがあり、いくつかのオブジェクトはcourses[]です。

courses[x] = new UCFCourse(courseCode, courseLevel, courseHours, replaceString, eitherCourse); 

私はcourses[] .IFを追加しましたところ、私はListOneをプリントアウトこれは私がすべての私のコースを含む大規模なリストを得る:x.Hereをインクリメントすることは、私のメインの私のコードである間、私は、各オブジェクトにプロパティ値を割り当てています。

List<UCFCourse> ListOne = new ArrayList<UCFCourse>(); 
     for (int i = 0; i < courses.length; i++) { 
      ListOne.add(courses[i]); 
     } 


//I added all my courses[] to a List 
List<UCFCourse> ListOne = new ArrayList<UCFCourse>(); 
Collections.sort(ListOne, new CourseComparator()); 

コンパレータクラス:私が最初に私のオブジェクトを作成したとき

import java.util.Comparator; 

public class CourseComparator implements Comparator<UCFCourse> { 
    public int compare(UCFCourse Course1, UCFCourse Course2) { 
     return Course1.getCourseLevel() - Course2.getCourseLevel(); 
    } 
} 

が、それはこのように見えた:

私はにそれらのすべてを追加しましたので、このビットが関連している場合
UCFCourse[] courses = new UCFCourse[75]; 

わかりません配列のリストは既にありますが、私は徹底したいと思います。

エラー:

Exception in thread "main" java.lang.NullPointerException 
+0

あなたはListOne'リストvaliable 'で' null'なので-Sを持っています。追加する場所を確認します。 –

+1

コンパイルエラーではなく、ランタイムエラーを通知しました。 – shmosel

+2

getCourseLevel()の戻り値として 'int'または' Integer'を使用していますか? –

答えて

1
List<UCFCourse> ListOne = new ArrayList<UCFCourse>(); 
<add your items to list here> 
Collections.sort(ListOne, new CourseComparator()); 

このコードは、現状では、あなたは比較に空のリストを送っています。リストに項目があることを確認したら、渡されたCourse1とCourse2の項目に実際に値が設定されていることを確認します。 'getCourseLevel()'をオフにして、値を呼び出し元のメソッドに戻すことで、すぐにテストできます。

+0

OPによると、 'ListOne'は配列から読み込まれました。配列がヌルでいっぱいであると仮定すると、 'getCourseLevel()'を呼び出すと同じ例外がスローされます。 – shmosel

1

あなたはListOne変数に新しいオブジェクトを作成していますが、その変数はまだ空ですので、NullPointerExceptionが発生しています。

あなたのコードを適切に識別できるように、キャメルケースを使用してみてください。

UCFCourse[] courses = new UCFCourse[75]; 

だけヌルオブジェクトとの完全な配列を作成します。コードから

+0

オブジェクトを追加するforループがあります。編集しました。 – OneU

1

はあなたが私はあなたに次のことを伝えることができます提供してきましたスニペット。この配列をループして、各オブジェクトをArrayListに追加すると、それらはインスタンス化されません。

List<UCFCourse> ListOne = new ArrayList<UCFCourse>(); 
    for (int i = 0; i < courses.length; i++) { 
     ListOne.add(courses[i]); 
    } 

結果がComparator#compare(UCFCourse c1, UCFCourse c2)メソッドのパラメータ、c1とc2ということで、NullPointerExceptionが発生につながる、nullになります。あなたはArrayListに追加する前に行う必要がある何

あなたUCFCourseオブジェクトを作成することです、例えば:

 for (int i = 0; i < courses.length; i++) { 
      courses[i] = new UCFCourse(...); 
     } 
+0

私のポストを更新しました。ありがとう! – OneU

+0

@Mrmugあなたはまだ**同じ** NPEを手に入れていますか?私はEclipseでこの問題を試してみました。オブジェクトを初期化した後、NPEは消え去ります。 – crazyExplorer