2017-04-17 1 views
0

私は問題がどこにあるかを見つけようとしています。しかし、このプログラムを実行するたびに、次のように表示されます。MergeSortの境界外の例外

Exception in thread "main" java.lang.NullPointerException 
    at MergeSortTest.mergeSort(MergeSortTest.java:8) 

誰かがこの問題を解決する手助けをしてくれますか?

あなたは、パラメータとして、あなたが渡しているアレイを使用しますが、初期化されていないものを使用していない
public class MergeSortTest 
{ 
    private static int[] arr; 

    public static void mergeSort(int[] array) 
    { 
     int start = 0; 
     int end = arr.length - 1; 
     mergeSort(start, end); 
     array = arr; 
    } 

    public static void mergeSort(int start, int end) 
    { 
     if (start == end) { 
      return; 
     } 

     int center = (start + end)/2; 
     mergeSort(start, center); 
     mergeSort(center + 1, end); 
     merge(start, center + 1, end); 
    } 

    public static void merge(int left, int right, int rightEnd) 
    { 
     int k = left; 
     int leftEnd = right-1; 
     int num = rightEnd - left + 1; 

     int front[] = new int[leftEnd - left + 1]; 
     int back[] = new int[rightEnd - right + 1]; 

     for (int i = left; i < front.length; i++) 
     { 
      front[i] = arr[i]; 
     } 

     for (int i = right; i < back.length; i++) 
     { 
      back[i] = arr[i]; 
     } 

     int[] temp = new int[num]; 

     while (true) 
     { 
      if (front[left] <= back[right]) 
      { 
       if (left < leftEnd) 
       { 
        temp[k] = front[left]; 
        k++; 
        left++; 
       } 

       if (left == leftEnd) 
       { 
        temp[k] = front[left]; 
        for (right = right; right < rightEnd + 1; right++) 
        { 
         k++; 
         temp[k] = back[right]; 
        } 
        break; 
       } 
      } 
      else 
      { 
       if (right < rightEnd) 
       { 
        temp[k] = back[right]; 
        k++; 
        right++; 
       } 

       if (right == rightEnd) 
       { 
        temp[k] = back[left]; 
        for(left = left; left < leftEnd+1; left++) 
        { 
         k++; 
         temp[k] = front[left]; 
        } 
        break; 
       } 
      } 
     } 
    } 

    public static void main(String []args) 
    { 
     int[] array = new int[10]; 
     initializeRandom(array); 
     for(int i = 0; i < array.length; i++) 
     { 
      System.out.print(array[i] + " "); 
     } 

     System.out.println(); 

     mergeSort(array); 

     for (int i = 0; i < array.length; i++) 
     { 
      System.out.print(array[i] + " "); 
     } 
    } 

    public static void initializeRandom(int[] array) 
    { 
     for (int i = 0; i < array.length; i++) 
     { 
      array[i] = (int)(Math.random() * 10 + 1); 
     } 
    } 
} 

答えて

0

:あなたのmain方法で

private static int[] arr; 

// ... 
int end = arr.length - 1; 

mergeSort(array); 

あなたはどちらかに必要arrmergeに転送するか、ロジックを書き換えてください。

関連する問題