【发布时间】:2020-05-30 16:43:53
【问题描述】:
我有一个非常简单的 for 循环,我需要在其中使用一个数组,但我需要对其进行排序,并发现当我知道我传递的数组已填充时,我得到了 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 的函数。 findMissingRepeatingFromArray 的调试为输入提供了
1
5
2 3 4 4 5
Debug: 2
Debug: 3
Debug: 4
Debug: 4
[2, 3, 4, 4, null]
我的调试语句返回正确的返回值。我做错了什么?
【问题讨论】:
-
执行
System.out.println(Arrays.asList(number).toString());并检查数组中是否有任何元素为null。 -
@PM 77-1 我在数组中有一个空元素。我有另一个调试,在输入中显示它已正确填充。
-
Collections.sort()方法不喜欢空值并抛出 NPE。 -
for(int i = 0;i<size-1;i++)排除最后一个元素,它仍然是null。 -
@PM 77-1 正确获取算法解决方案的索引让我把输入搞得一团糟。谢谢。
标签: java arrays generics collections nullpointerexception