2012-04-24 6 views
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]); 
      } 
+0

スタックトレースを表示します。スタックトレースは 'NullPointerException'の原因となる正確な行番号を与えます。 –

答えて

3

i Array.lengthとより少ないかもしれないが、i+1はないかもしれません。 i要素があることを確認したときに、i+1要素があると仮定しています。したがって、i+1nullになり、.splitnullにはできません。

+0

より正確に言えば、彼は実際には 'array'のサイズを調べていますが、' null'の配列に初期化されていると思われる 'sortedArray'にアクセスするので、NPEです。 'i + 1'が' sortedArray.length'より大きい場合、ArrayIndexOutOfBoundsExceptionを取得しますか?このエラーはs1.splitによっても引き起こされる可能性があります –

0

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

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; 
    } 
関連する問題