0

わかりました、私はこのプログラムを Java クラスへの移行のために完成させようとしていますが、この 1 つの部分で問題が発生しています。これ以外はすべて機能しています。私は 3 つの配列、1 つの文字列、2 つの型 int をすべて並列に持っています。これらを名前順、次に番号順でアルファベット順に並べ替える必要があります (最初に文字列配列を使用し、次に最初の int 配列を使用します。並べ替えは 3 番目の配列の影響を受けません。3 次元で並列に練習するためにあります)

これは私がこれまでに持っているコードです。

    public static void sortDatabase(int numRecords, String[] sDeptArr, 
              int[] iCourseNumArr, int[] iEnrollmentArr)
   {
       System.out.println("Sort the database. \n");
       String sTemp = null;
       int iTemp = 0;
       int eTemp = 0;
       for(int i=0; i<numRecords; i++)
       {
           int iPosMin = i;
           for(int j=i+1; j<numRecords; j++)
           {
               String a = sDeptArr[j];
               String b = sDeptArr[iPosMin];
               if(a.compareTo(b) != 0)
                   iPosMin = j;
               else if(!sDeptArr[j].equals(sDeptArr[iPosMin]) && iCourseNumArr[j] < iCourseNumArr[iPosMin])
                   iPosMin = j;
           }
           sDeptArr[i] = sTemp;
           sDeptArr[i] = sDeptArr[iPosMin];
           sDeptArr[iPosMin] = sTemp;
           iCourseNumArr[i] = iTemp;
           iCourseNumArr[i] = iCourseNumArr[iPosMin];
           iCourseNumArr[iPosMin] = iTemp;
           iEnrollmentArr[i] = eTemp;
           iEnrollmentArr[i] = iEnrollmentArr[iPosMin];
           iEnrollmentArr[iPosMin] = eTemp;
       }
   }

Javaで行う必要があります。で構成される 15 行目にエラーが表示されます。

if(a.compareTo(b) != 0)

NullPointerException を取得しています。

基本的に、偽のクラス名とコース番号を並べ替えながら、登録者数をコース名とコース番号に対応するインデックスと並行させます。

4

4 に答える 4

1

2 番目のループ ( for (int j=...1 つ) の後、次のコードがあります。

       sDeptArr[i] = sTemp;
       sDeptArr[i] = sDeptArr[iPosMin];
       sDeptArr[iPosMin] = sTemp;

sDeptArr[i]コードを熟読したところ、要素をとで交換しようとしていることがわかりましたがsDeptArr[iPosMin]、割り当てが正しくありません。

これは宿題なので、なぜこのコードが機能しないのかを調べて、機能する結果を得る必要があると思います。デバッガーでコードをステップ実行することも、頭の中でコードをステップ実行することもできます (かなり簡単な場合)。

于 2010-11-29T21:50:26.090 に答える
1

これは、a==null の場合にのみ発生する可能性があります。しかし、a は sDeptArr[j] です。これは、配列のこの要素が null であることを意味します。

したがって、このメソッドに送信するデータには一貫性がありません。

しかし、なぜこのように並べ替えを実装しているのですか? この問題を解決する「正しい」方法は、必要な数のフィールドを含む新しいデータ構造を作成することです。次に、1 つの配列を作成し、 を使用して並べ替えますArrays.sort()。私が言及したデータ構造は実装する必要がありますComparable

これは並べ替えの演習ですが、データ構造と 1 つの配列を作成し、並べ替えアルゴリズムを記述します。

そして、さらに別のメモ。メソッドが配列と長さを別々のパラメーターとして受け入れるため、Cのバックグラウンドがあるようです。Java 配列はその長さを「認識」しています。a.length を使用して、配列 a の長さを取得します。

于 2010-11-29T21:51:40.570 に答える
0

配列レベルにとどまる必要があり(現実の世界では必要な高レベルのデータ構造を作成しない)、バブルソートを使用する必要があると仮定します(基本的に使用しているように見えますが、現実の世界では使用しないでください。遅すぎる)...

あなたはあまりにも多くの一時的な位置/変数に縛られています。本当に必要なのは、全長の最大値に対して外側をループし、検査されていない各インデックスに対して内側をループし(バブルソートを参照)、基準に基づいて「i」と「i + 1」を比較することです(2つの値を考慮します)。せいぜいこの場合)そしてそれらが後方にある場合はそれらを「交換」します。

于 2010-11-29T22:21:52.480 に答える
0

で構成される 15 行目にエラーが表示されます。

if(a.compareTo(b) != 0)

NullPointerException を取得しています。

これは、配列内の要素の 1 つが であることを示していますnull。配列の内容を調べて、並べ替えようとしている要素にnull要素が含まれていないことを確認してください。配列のインデックスが 0 から始まることを忘れていないことを確認してください。 がnull配列の事前並べ替えを行う正当な値である場合は、コードがそれを防止していることを確認してください。

于 2010-11-29T21:44:59.567 に答える