0

私は長い間プロジェクトに取り組んできましたが、nullpointerexception が発生しています。オブジェクトが何も指していないときだと理解しています。Java でバブル ソートを実行しているときに、このエラーが発生します。この例外の原因がわからないため、解決できません。このコードの目的は、学生 ID 番号の配列を特定の順序で並べ替えることです。ここでは降順を選択しました。

 public static void idNumber()
    {
        String[] iD = new String[150];  //array for ID Numbers
        //System.out.println("Original order");
        for(int i = 0; i < nNumStudents; i++)   //add ID numbers to array iD
        {
            iD[i] = srStudents[i].getStudentKey();

            //System.out.println(srStudents[i].getStudentKey());
        }
        //bubble sort
        int k =0;
        int j =0;
        boolean exchange = true;
        String temp;
        temp = new String();
        while ((k < iD.length - 1) && exchange)
        {
            exchange = false;
            k++;
            for(j = 0; j < iD.length - k; j++)
            {
                if(iD[j].compareTo(iD[j + 1]) > 0)
                {
                    temp = iD[j];
                    iD[j] = iD[j + 1];
                    iD[j + 1] = temp;       
                    exchange = true;

                }
            }
        }
        System.out.println(iD);
    }

Exception in thread "main" java.lang.NullPointerException
at java.lang.String.compareTo(String.java:1139)
at StudentRegistrar.idNumber(StudentRegistrar.java:152)
at Sort.main(Sort.java:21)
4

2 に答える 2

0

あなたのコードを一目見ただけで、配列のサイズが学生の数を超えている可能性があると思います。この場合、配列内の空のスロットを比較しようとしており、null ポインター例外が発生します。これを修正するには、配列の全長ではなく nNumStudents にインクリメントします。

于 2013-03-24T22:52:25.803 に答える
0

のすべてのメンバーが初期化されていないため、このnullpointerが発生してString array String[] iD = new String[150]; います。たとえば、このiD配列にデータを入力しているforループが150まで実行されていないか、そのメンバーの1つがnullで初期化されているためです。

最初に印刷して、nNumStudents の値が 150 であることを確認します。次に、iD 配列に割り当てられているすべての値が null 以外の値であることを確認します。割り当てられているすべての値を印刷するようにコードを変更することで、これを行うことができます。

for(int i = 0; i < nNumStudents; i++)   //add ID numbers to array iD
    {
        iD[i] = srStudents[i].getStudentKey();

        //uncomment the below line and see if it doesn't print null

        System.out.println(srStudents[i].getStudentKey());
    }

150 を超えると、ArrayIndexoutofboundnull ポインターではない例外が発生します。

于 2013-03-24T22:55:01.827 に答える