我正在编写一个冒泡排序方法,它涉及对字符串进行标记,并且我不断得到一个神秘的空指针异常。
该方法采用字符串数组。每个字符串包含四个令牌,姓氏,名字,社会安全号码和年龄。该方法需要能够按任何这些标记排序,因此它将每个字符串分解为标记,将标记放在数组中,然后使用冒泡排序对标记进行排序,根据标记排序重新排列数组中的每个字符串。
当我尝试将第二个字符串拆分为标记并将其保存到数组时,会发生错误。
这是代码。
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 :(得分:3)
i
可能小于array.length,但i+1
可能不是。{1}}。当您仅检查有i+1
个元素时,您假设有i
个元素。因此,i+1
转到null
,您不能.split
null
。
答案 1 :(得分: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;
}