0

我一直在从事一个项目很长时间了,我遇到了一个空指针异常。我知道这是当一个对象没有指向任何东西的时候。在 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)
4

2 回答 2

0

从您的代码一目了然,我的猜测是您的数组大小可能超过了学生的数量。如果是这种情况,您将尝试比较数组中的空槽,这会产生空指针异常。要解决此问题,请递增到 nNumStudents 而不是数组的全长。

于 2013-03-24T22:52:25.803 回答
0

这个空指针即将出现,因为所有成员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异常,而不是空指针

于 2013-03-24T22:55:01.827 回答