0

文字列のトークン化を含むバブル ソート メソッドを作成していますが、謎のヌル ポインター例外が発生し続けます。

このメソッドは文字列の配列を取ります。各文字列には、姓、名、社会保障番号、年齢の 4 つのトークンが含まれます。メソッドはこれらのトークンのいずれかでソートできる必要があるため、各文字列をトークンに分割し、トークンを配列に配置してから、バブル ソートを使用してトークンをソートし、トークンのソートに基づいて配列内の各文字列を再配置します。 .

2 番目の文字列をトークンに分割して配列に保存しようとすると、エラーが発生します。

これがコードです。

            for (int i=0; i< array.length;i++) {


              String s1 = sortedArray[i];
              String s2 = sortedArray[i+1];

              String[] holdingArray1;
              String[] holdingArray2;

              holdingArray1 = s1.split("\\s+");
              holdingArray2 = s2.split("\\s+");



              int result = holdingArray1[0].compareTo(holdingArray2[0]);



              if (result > 0)
              {

                  sortedArray[i] = s2;
                  sortedArray[i+1] = s1; 
              }


              System.out.println(sortedArray[i]);
              System.out.println(sortedArray[i+1]);
            }
4

2 に答える 2

3

iarray.length よりも小さい場合がありますが、そうでi+1ない場合もあります。i+1要素があることだけを確認した場合、要素があると想定していiます。したがって、i+1に行きnull、あなたはできません.split null

于 2012-04-24T23:01:16.163 に答える
0

sortedArray[i+1] を実行しているため、array.length-1 未満で loop を実行する必要があります。

for (int i = 0; i < array.length-1; i++)
{
  // logic
}

以下は、完全なバブル ソート アルゴリズムの例です。

    public static int[] bubbleSort(int[] arr, Boolean descending)
    {
         Boolean finished = false;

         while (!finished)
         {
             Boolean held = false;
             int hold;

             for (int i = 0; i < arr.length-1; i++)
             {
                  int curr = arr[i];
                  int next = arr[i+1];
                  Boolean test = curr > next;
                  if (descending) test = curr < next;

                  if (test)
                  {
                     held = true;
                     hold = next;
                     arr[i] = hold;
                     arr[i+1] = curr;
                  }             
             }

             if (!held) finished = true;
          }

          return arr;
     }
于 2012-11-27T17:27:28.547 に答える