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]);
            }
4

2 回答 2

3

i可能小于 array.length 但i+1可能不会。i+1当您仅检查是否存在元素时,您会假设存在i元素。因此,i+1null,你不能.split null

于 2012-04-24T23:01:16.163 回答
0

您需要在小于 array.length-1 时执行循环,因为您正在执行 sortedArray[i+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;
     }
于 2012-11-27T17:27:28.547 回答