我一直在研究一个项目,我正在遇到一个nullpointerexception。我明白,当一个物体指向什么时候。我在Java中进行冒泡排序时遇到此错误。我无法弄清楚导致此异常的原因因此无法解决。此代码的目的是按特定顺序对学生ID号的数组进行排序,我选择了降序。
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)
答案 0 :(得分:0)
从您的代码中一眼就可以看出,您的数组大小可能超过了学生数量。如果是这种情况,则尝试比较数组中的空槽,这将产生空指针异常。要解决此问题,请增加到nNumStudents而不是数组的全长。
答案 1 :(得分:0)
这个nullpointer即将到来,因为String array String[] iD = new String[150];
的所有成员都没有初始化,例如填充此iD数组的for循环要么直到150运行,要么其中一个成员初始化为null所以
首先打印并检查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
异常而不是空指针