使用java冒泡排序的Nullpointerexception

时间:2013-03-24 22:23:06

标签: java sorting nullpointerexception

我一直在研究一个项目,我正在遇到一个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)

2 个答案:

答案 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异常而不是空指针