2013-03-24 43 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

你得到空指针是什么行?共享日志,并且在特定的行上声明 – 2013-03-24 22:24:36

+0

我在提供错误的行中添加了错误消息...我不知道当您询问日志时您要求什么?如果可以,请通知我。谢谢 – user2205621 2013-03-24 22:31:15

+0

打印'j'的值。可能它超过了150。 – Maroun 2013-03-24 22:33:52

回答

0

从你的代码的一瞥,我的猜测是,它可能是你的数组大小超过学生人数。如果是这样的话,你试图比较数组中的空插槽,这会给出空指针异常。为了解决这个问题,增加到nNumStudents而不是数组的全长。

0

此空指针快到了由于String array String[] iD = new String[150];所有成员不初始化例如for循环被填充此ID数组或者未运行,直到150或它的一个成员与空,因此

首先初始化打印并检查nNumStudents的值应为150.然后确保分配给iD数组的每个值都是非空值,可以通过修改代码来打印分配给它的所有值来执行此操作。

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,那么你将得到一个ArrayIndexoutofbound异常不为空指针