2012-04-24 90 views
0

我正在写一个涉及对字符串进行标记的冒泡排序方法,并且我不断收到一个神秘的空指针异常。尝试冒泡排序时发生空指针异常排序

该方法需要一个字符串数组。每个字符串包含四个令牌,姓氏,名字,社会安全号码和年龄。该方法需要能够通过任何这些标记进行排序,因此它将每个字符串分解为标记,将标记放置在数组中,然后使用冒泡排序对标记进行排序,根据标记排序重新排列数组中的每个字符串。

当我尝试将第二个字符串拆分为标记并将其保存到数组时,会发生此错误。

这是代码。

  for (int i=0; i< array.length;i++) { 


       String s1 = sortedArray[i]; 
       String s2 = sortedArray[i+1]; 

       String[] holdingArray1; 
       String[] holdingArray2; 

       holdingArray1 = s1.split("\\s+"); 
       holdingArray2 = s2.split("\\s+"); 



       int result = holdingArray1[0].compareTo(holdingArray2[0]); 



       if (result > 0) 
       { 

        sortedArray[i] = s2; 
        sortedArray[i+1] = s1; 
       } 


       System.out.println(sortedArray[i]); 
       System.out.println(sortedArray[i+1]); 
      } 
+0

向我们展示堆栈跟踪。堆栈跟踪会给出导致“NullPointerException”的确切行号。 – 2012-04-24 23:10:05

回答

3

i可以小于array.length但i+1可能不是。当你只检查了i元素时,你认为有i+1元素。因此,i+1null,你不能.splitnull

+0

更确切地说,他实际上在检查'array'的大小,但是他访问了'sortedArray',它似乎已经被初始化为一个'null'数组,因此是NPE。如果'i + 1'大于'sortedArray.length',那么他会得到一个ArrayIndexOutOfBoundsException?该错误甚至可能由s1.split引起 – 2012-04-24 23:26:49

0

由于您正在进行sortedArray [i + 1],所以您需要循环,而不是array.length-1。

for (int i = 0; i < array.length-1; i++) 
{ 
    // logic 
} 

这是一个完整的气泡排序算法的例子。

public static int[] bubbleSort(int[] arr, Boolean descending) 
    { 
     Boolean finished = false; 

     while (!finished) 
     { 
      Boolean held = false; 
      int hold; 

      for (int i = 0; i < arr.length-1; i++) 
      { 
        int curr = arr[i]; 
        int next = arr[i+1]; 
        Boolean test = curr > next; 
        if (descending) test = curr < next; 

        if (test) 
        { 
        held = true; 
        hold = next; 
        arr[i] = hold; 
        arr[i+1] = curr; 
        }    
      } 

      if (!held) finished = true; 
      } 

      return arr; 
    }