2013-08-12 1 views
1

아주 간단한 병합 정렬 구현을했지만 java.lang.NullPointerException을 계속 가져 왔습니다. 여기에 내 코드입니다 :병합 정렬 코드 던짐 NullPointerException

public class MergeSort { 

    private int[] c; 
    private int i = 0, j = 0, k = 0; 

    public MergeSort(int[] a, int[] b){ 

     while(i < a.length && j < b.length){ 

      if(a[i] > b[j]) 
       c[k++] = b[j++]; 
      else 
       c[k++] = a[i++]; 
     } 

     while(i < a.length){ 
      c[k++] = a[i++]; 
     } 

     while(j < b.length){ 
      c[k++] = b[j++]; 
     } 

     i = 0; 
     while(i < c.length){ 
      System.out.print(c[i++] + " "); 
     } 
    } 

} 

그리고이 같은 기본 클래스에서 생성자 호출 오전 : 나는 초기화되지 않은 객체를 사용하기위한 예외가 알고 있지만

public class MainRun { 


    public static void main(String[] args) { 

     System.out.println("Merge Sort Algorithm"); 

     int a[] = {1, 3, 5, 7, 9}; 
     int b[] = {2, 6, 7, 9, 11}; 

     new MergeSort(a, b); 

    } 

} 

가 여전히 나는를 찾을 수 없습니다 오전 내 코드에서 오류가 발생했습니다. 정확한 오류는 다음과 같습니다.

Merge Sort Algorithm Exception in thread "main" java.lang.NullPointerException at MergeSort.(MergeSort.java:14) at MainRun.main(MainRun.java:11)

무엇이 잘못 되었나요? 당신은 변수를 initalise하지 못한

+4

당신은 당신은 또한 당신의 디자인을 재고해야 – SeniorJD

+0

은'c' 변수를 초기화하지 않았다. – Maroun

+0

전체 logcat 스택 추적을 제공합니다. –

답변

5

c은 서면으로이 작업을 수행

을 초기화되지 않습니다 c이므로 회선에 액세스하려고 시도했을 때 여전히 null입니다.

c[k++] = b[j++]; 

용액과 같이 새로운 배열을 생성하는 것이다

x가 어레이의 의도 된 크기
c = new int[x]; 

.

+0

배열 길이를 모를 경우 어떻게해야합니까? 임의의 넓은 범위를 통과합니까? –

+1

이것은 설계상의 문제입니다. 그러나 병합 정렬의 경우 배열의 크기를 알 수 있습니다. 원래 입력 배열의 크기가됩니다. – jazzbassrob

+0

@jazzbassrob는 바로 –

1

이 0으로 채워 길이 x 배열을 생성

private int[] c = new int[x]; 

: 감사합니다 :)

0

당신은 당신의 c 배열의 만 선언 초기화되지 않은 :

private int[] c; 
1

을 당신은 필요한 길이로 배열 c를 초기화하는 NEET.

private int[] c = new int[length]; 
0

는 그냥 c 초기화하기 :

public class MergeSort { 

    private int[] c; 
    private int i = 0, j = 0, k = 0; 

    public MergeSort(int[] a, int[] b){ 
     c = new int[a.length]; // <- this is what you need 

     while(i < a.length && j < b.length){ 

      if(a[i] > b[j]) 
       c[k++] = b[j++]; 
      else 
       c[k++] = a[i++]; 
     } 

     while(i < a.length){ 
      c[k++] = a[i++]; 
     } 

     while(j < b.length){ 
      c[k++] = b[j++]; 
     } 

     i = 0; 
     while(i < c.length){ 
      System.out.print(c[i++] + " "); 
     } 
    } 

} 

public class MainRun { 


    public static void main(String[] args) { 

     System.out.println("Merge Sort Algorithm"); 

     int a[] = {1, 3, 5, 7, 9}; 
     int b[] = {2, 6, 7, 9, 11}; 

     new MergeSort(a, b); 

    } 

}