2013-03-24 2 views
0

나는 길고 길게 프로젝트를 진행해 왔으며 nullpointerexception을 실행 중입니다. 나는 그것이 물건이 아무 것도 가리키고 있지 않다는 것을 이해합니다. Java에서 버블 정렬을 수행하는 동안이 오류가 발생합니다. 이 예외의 원인을 파악할 수 없어 해결할 수 없습니다. 이 코드의 목적은 학생 ID 번호 배열을 특정 순서로 정렬하는 것입니다. 내림차순을 선택했습니다.Java 버블 정렬을 사용한 Nullpointerexception

public static void idNumber() 
    { 
     String[] iD = new String[150]; //array for ID Numbers 
     //System.out.println("Original order"); 
     for(int i = 0; i < nNumStudents; i++) //add ID numbers to array iD 
     { 
      iD[i] = srStudents[i].getStudentKey(); 

      //System.out.println(srStudents[i].getStudentKey()); 
     } 
     //bubble sort 
     int k =0; 
     int j =0; 
     boolean exchange = true; 
     String temp; 
     temp = new String(); 
     while ((k < iD.length - 1) && exchange) 
     { 
      exchange = false; 
      k++; 
      for(j = 0; j < iD.length - k; j++) 
      { 
       if(iD[j].compareTo(iD[j + 1]) > 0) 
       { 
        temp = iD[j]; 
        iD[j] = iD[j + 1]; 
        iD[j + 1] = temp;  
        exchange = true; 

       } 
      } 
     } 
     System.out.println(iD); 
    } 

Exception in thread "main" java.lang.NullPointerException 
at java.lang.String.compareTo(String.java:1139) 
at StudentRegistrar.idNumber(StudentRegistrar.java:152) 
at Sort.main(Sort.java:21) 
+1

nullpointer를 사용하는 라인은 무엇입니까? 로그를 공유하고 특정 라인을 명시하십시오 –

+0

오류를 제공하는 줄과 함께 오류 메시지를 추가했습니다 ... 로그를 요청할 때 무엇을 요구하는지 모르십니까 ?? 가능한 경우 알려주십시오. 감사합니다. – user2205621

+0

'j'의 값을 출력하십시오. 아마도 그것은 150을 초과 할 것입니다. – Maroun

답변

0

코드를 한 눈에 보면 배열 크기가 학생 수를 초과 할 가능성이 있습니다. 이 경우 어레이의 빈 슬롯을 비교하려고 시도하고 있으며 이는 널 포인터 예외를 발생시킵니다. 이 문제를 해결하려면 배열의 전체 길이가 아닌 nNumStudents로 증가시킵니다.

0

이 nullpointer이 ID 배열을 채우고 for 루프는 어느 150 구성원 중 하나까지 널 그렇게

첫째로 초기화 실행되지 String array String[] iD = new String[150];의 모든 구성원은, 예를 들어 초기화되지 않기 때문에오고 print를 실행하고 nNumStudents의 값이 150인지 확인하십시오. 그런 다음 iD 배열에 할당 된 모든 값이 null이 아닌 값인지 확인하십시오. 할당 된 모든 값을 인쇄하도록 코드를 수정하여이 작업을 수행 할 수 있습니다.

for(int i = 0; i < nNumStudents; i++) //add ID numbers to array iD 
    { 
     iD[i] = srStudents[i].getStudentKey(); 

     //uncomment the below line and see if it doesn't print null 

     System.out.println(srStudents[i].getStudentKey()); 
    } 

150을 초과하면이 표시됩니다.예외 널 포인터가 아닙니다

관련 문제