2010-06-01 6 views
2

다음 mergesort 코드를 작성했습니다.머지 소스 구현시 런타임 오류가 발생했습니다.

public class mergesort { 

    public static int a[]; 

    public static void merges (int work[], int low, int high) { 
     if (low==high) 
      return; 
     else { 
      int mid = (low+high)/2; 
      merges(work,low,mid); 
      merges(work,mid+1,high); 
      merge(work,low,mid+1,high); 
     } 
    } 

    public static void main (String[] args) { 
     int a[] = new int[] {64, 21, 33, 70, 12, 85, 44, 99, 36, 108}; 
     merges(a,0,a.length-1); 
     for (int i=0; i<a.length; i++) { 
      System.out.println(a[i]); 
     } 
    } 


    public static void merge (int work[], int low, int high, int upper) { 
     int j = 0; 
     int l = low; 
     int mid = high-1; 
     int n = upper-l+1; 
     while (low<=mid && high<=upper) 
      if (a[low] < a[high]) 
       work[j++] = a[low++]; 
      else 
       work[j++] = a[high++]; 
     while (low <= mid) 
      work[j++]=a[low++]; 
     while (high <= upper) 
      work[j++] = a[high++]; 
     for (j=0;j<n;j++) 
      a[l+j]=work[j]; 
    } 
} 

작동하지 않습니다. 편집 후이 오류가 있습니다.

java.lang.NullPointerException 
    at mergesort.merge(mergesort.java:45) 
    at mergesort.merges(mergesort.java:12) 
    at mergesort.merges(mergesort.java:10) 
    at mergesort.merges(mergesort.java:10) 
    at mergesort.merges(mergesort.java:10) 
    at mergesort.main(mergesort.java:27) 

이 문제는 어떻게 해결할 수 있습니까?

+0

어떤 라인이 45 라인입니까? –

+1

@RickL - 태그 지정 관련 - 'NullPointerException'은 컴파일러 오류가 아니지만 런타임 오류입니다. – Kobi

+0

네, 저의 실수입니다! – RickL

답변

6

님의 a 두 배열을 불렀다 :

정적, mergesort.a :

public static int a[]; 

및 지역 변수 주에 : 당신이 mergea를 사용하는 경우

int a[]=new int[]{64,21,33,70,12,85,44,99,36,108}; 

, 당신은 사용 정적 멤버. 초기화되지 않았다.
그것은 당신이 다음 같은 될 것이라고, 정적 mergesort.a에 인수로 work = a이 때문에, merge 이상한 만들고, 참조 것이라고, 그러나

a = new int[]{64,21,33,70,12,85,44,99,36,108}; 

을 기록 할 뻔 mergesort.a를 초기화하고 싶어 정렬.

혼동? 그래서 나는 ... :)

관련 문제