2012-04-24 93 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; 
    }