0

ファイルからいくつかのレコードを読み取り、それらを特別な方法で並べ替えるコードを書いています。私はこのようなコードを試しました:

public class Main {

    static class judgement implements Comparable<judgement> {
        public int q;
        public int d;
        public int r;

        public int compareTo(judgement j) {
            int k = ((judgement) j).q;
            return 0;
        }
    }

    public static void method() throws Exception {
        judgement[] judgements;
        judgements = new judgement[18425];
        try {
            // fill the "judgements" array
        } finally {
            Arrays.sort(judgements);
        }
    }

    public static void main(String[] args) throws Exception {
        method();
    }

}

しかし、compareTo関数でNullPointerExceptionエラーが発生します。誰かがこの問題で私を助けることができますか?

4

4 に答える 4

5

これは、配列がnullポインターで埋められているためです。コンパレータは、nullオブジェクトを相互に比較できません。

配列を作成しても、配列の各要素は初期化されません。

于 2012-04-14T19:43:03.860 に答える
2

compareTo()の実装に関しては、配列にnull以外の要素のみが含まれていることを確認してください。それ以外の場合、関数compareTo()で、想定される既存の判断で「q」属性を呼び出すと、NullPointerExceptionが発生します。

さらに、タブを避け、コレクションの使用を好みます。あなたの場合、要素のcompareTo()メソッドを内部的に使用するため、配列の代わりにTreeSetオブジェクトを使用できます。

于 2012-04-14T19:45:17.970 に答える
2

null 値で配列を初期化しています。

judgements = new judgement[18425];

また、比較対象のヌル値をチェックしていません。if ステートメントを使用する必要があります。

public int compareTo(judgement j) {
          int k =0;
    if(j!=null){
    k = ((judgement) j).q;
    } 

                return 0;
            }
于 2012-04-14T19:46:25.413 に答える
2

おそらく起こっているのは、配列の一部の要素がnull.

関数に null チェックを含めることをお勧めしますcompareTo。また、現在、compareTo関数は機能していません。常に 0 を返します。これは、すべての項目が等しいと言っているようなものです。

あなたの他の問題は、使用しtry{}finally{}てはならないものに使用しているように見えることです。

于 2012-04-14T19:58:03.260 に答える