2016-04-01 11 views
-1

私は、最も重要な基数ソートのコードを書いたが、私はIndexBoundsExceptionというエラーが表示され続けている:arr [i] = arr1.get(i);.そして今、論理が私にとって正しいと思われるので、何が間違っているのか分かりません。最も重要な数字基数Javaで並べ替え

public static int[] msdRadixSort(int[] arr) { 
    if (arr == null) { 
     throw new IllegalArgumentException("The array is null!"); 
    } 
    //search through to find msd 
    int temp = arr[0]; 
    for (int i = 0; i < arr.length; i++) { 

     if (Math.abs(temp) <= Math.abs(arr[i])) { 
      temp = arr[i]; 
     } 
    } 
    //find the length of the msd 
    int k = 1; 
    while (!(temp/10 == 0)) { 
     temp = temp/10; 
     k++; 
    } 
    ArrayList<Integer> arr1 = new ArrayList<Integer>(arr.length); 
    for (int i = 0; i < arr.length; i++) { 
     arr1.add(arr[i]); 
    } 
    msdRadixSort(arr1, k); 
    System.out.println(arr1); 
    for (int i = 0; i < arr.length; i++) { 
     arr[i] = arr1.get(i); 
    } 
    return arr; 
} 
+0

でなければなりません間違っていますか?スタックトレースを表示し、それを引き起こす行を表示します(行番号は表示されません)。また、コードをデバッグしようとしましたか? – Andreas

+0

私は持っています。私はエラーが入れ子のforループで発生すると思います:for(int j = 0; j user1979029

答えて

1

ネストされたループは、それはあなたがそのエラーが出るん

for (int j = 0; j < bucket.length; j++) { 
    for (int i = 0; i < bucket[j].size(); i++) { 
     arr.add(bucket[j].get(i)); 
    } 
} 
+0

これは実際にはエラーを修正しませんでした。私は自分のコードに何が間違っているのか分かりません。私はバケットが正しいバケツに入れられていると思います。 – user1979029

+0

私はテスト値を使って実行したときにIndexOutOfBoundsExceptionを取得しなかったので、どのようなエラーが出るのですか? – minecraftwarlock

+0

バケット[再帰]メソッドでエラーが発生しました.add(i); msdRadixSort(バケット[i ]、k - 1);および非再帰型のもの:msdRadixSort(arr1、k); – user1979029

関連する問題