2012-04-21 21 views
0

私はここ数日間、辞書編集のマージソート方法を実装するのに苦労しています。私はポイントに私が得たまで来た:ArrayIndexOutOfBoundsエラーと私はなぜ知りません。私は誰も見て、何が間違っているかもしれないか教えてください。私はデバッグを試みましたが、すべての値が正しいようです。 AIXに配列の並べ替え方法

返信:それはこの時点で行わtemp[index1] = array[min + index1] ; これらは、その正確な時間での値である:

array :String[5] (5 entries originating from a text file) 
min : 0 
max : 1 
size : 2 
pivot : 0 
temp : Comparable<T>[2] (both entries null) 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 
    at Merge.mergeSort(Merge.java:47) 
    at Merge.mergeSort(Merge.java:43) 
    at Merge.Sort(Merge.java:20) 
    at Sort.main(Sort.java:96) 

ライン43:

mergeSort(array, pivot + 1, max) ; 

ライン47:

temp[index1] = array[min + index1] ; 

コード:

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

public class Merge 
{ 
    public static void Sort (LinkedList listIn, int size) throws Exception 
    { 
     String[] mArray = new String[size] ; 
     String textContent = null ; 
     File outputFile ; 

     //copy the list values in the array 
     for (int i = 0 ; i < size ; i++) 
     { 
      mArray [i] = listIn.get(i).printNode(); 
     } 

     mergeSort(mArray, 0, mArray.length) ;  


    } 

    public static <T extends Comparable<? super T>> void mergeSort(T[] array, int min, int max) 
    { 
     T[] temp ; 
     int index1 ; 
     int left ; 
     int right ; 

     // if array is of size 1 

     if (min == max) 
      return ; 

     // find length and midpoint 
     int size = max - min + 1 ; 
     int pivot = (min + max)/2 ; 
     temp = (T[]) (new Comparable[size]) ; 

     mergeSort(array, min, pivot) ; 
     mergeSort(array, pivot + 1, max) ; 

     for (index1 = 0 ; index1 < size ; index1++) 
     { 
      temp[index1] = array[min + index1] ; 
     } 

     left = 0 ; 
     right = pivot - min + 1 ; 
     for (index1 = 0 ; index1 < size ; index1++) 
     { 
      if (right <= max - min) 
       if (left <= pivot - min) 
        if (temp[left].compareTo(temp[right]) > 0) 
         array[index1 + min] = temp[right++] ; 
        else 
         array[index1 + min] = temp[left++] ; 
       else 
        array[index1 + min] = temp[right++] ; 
      else 
       array[index1 + min] = temp[left++] ; 
     } 
    } 


} 
+0

例外の時点でスタックトレースを含めると、他の人が手助けするのに役立ちます。 – NPE

+0

編集した質問を見てください。私は少しのトレースを持っています – serge

+0

例外を指摘するスタックトレースまたはその一部を含めるようにしてください。 – dreamcoder

答えて

1

Sortメソッドは、最初にmergeを呼び出すときに間違った値を送信しています。変更mergeSort(mArray, 0, mArray.length)からmergeSort(mArray, 0, mArray.length-1);

+0

ありがとう、ありがとう。それは魅力のように働いた! – serge

関連する問題