我有一个非常简单的循环,我需要在其中使用数组,但我需要对其进行排序,并发现当我知道我正在传递的数组被填充时,我得到了一个 NullpointerException。 我正在使用 Array.sort(( 意味着我的 int[] 需要是一个泛型,并且还认为我可以转换为列表并使用集合排序,但两者似乎都给了我错误 NullPointerException。
public static void main(String[] args) {
try {
int[] arrangedArray = null;
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
int numberInputs = Integer.parseInt(buffer.readLine());
while(numberInputs>0) {
int size = Integer.parseInt(buffer.readLine());
String[] arr1 = buffer.readLine().split(" ");
Integer[] array1 = new Integer[size];
for(int i = 0;i<size-1;i++) {
System.out.println("Debug: " + arr1[i]);
array1[i] = Integer.parseInt(arr1[i]);
}
arrangedArray = findMissingReapeatingFromArray(array1, size);
numberInputs--;
}
for(int k =0;k<arrangedArray.length;k++) {
System.out.print(arrangedArray[k] + " ");
}
} catch(IOException ex) {
System.out.println(ex.toString());
}
}
static int[] findMissingReapeatingFromArray(Integer[] number, int length) {
List list = new ArrayList<>(Arrays.asList(number));
Set<Integer> set = new HashSet<Integer>(list);
System.out.println("Debug: " + set.size() + " " + number.length + " " + length);
int[] array = new int[2];
Collections.sort(Arrays.asList(number)); // the error is here stating my array is null
//for loop to accomplish algorithm
return array;
}
**编辑:**添加了 main 以查看输入,其中输入显示传递给函数的数组中的所有元素都是正确的,而没有 null。查找缺失重复从数组给出的调试为输入
1
5
2 3 4 4 5
Debug: 2
Debug: 3
Debug: 4
Debug: 4
[2, 3, 4, 4, null]
我的调试语句返回正确的返回。 我做错了什么?
错误的原因是数组中有null
值。 在内部Collections.sort()
使用compareTo()
无法在null
上调用的方法。
数组中null
的原因是您没有初始化其最后一个元素,并且它保持其默认值。
你有
for(int i = 0; i < size-1; i++)
它应该是
for(int i = 0; i < size; i++)
[从 0 到 (大小-1(的索引值]