【问题标题】:Array sort NullpointerException数组排序 NullpointerException
【发布时间】: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&lt;size-1;i++) 排除最后一个元素,它仍然是null
  • @PM 77-1 正确获取算法解决方案的索引让我把输入搞得一团糟。谢谢。

标签: java arrays generics collections nullpointerexception


【解决方案1】:

您的错误的原因是您的数组中有null 值。在内部 Collections.sort() 使用无法在 null 上调用的 compareTo() 方法。

null 在你的数组中的原因是你没有初始化它的最后一个元素并且它保持它的默认值。

你有

for(int i = 0; i < size-1; i++)

应该是这样的

for(int i = 0; i < size; i++) 

[索引值从 0 到 (size-1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2013-11-29
    • 2013-02-16
    相关资源
    最近更新 更多