You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免空指针异常并完整打印含空元素的Integer数组?

解决数组含null元素时Arrays.sort降序排序的空指针问题

问题原因

你使用Collections.reverseOrder()作为排序比较器时,默认的Integer比较逻辑无法处理null元素——当比较器尝试访问null对象的内部字段时,就会抛出NullPointerException。

解决方案:自定义比较器处理null元素

通过自定义Comparator,明确指定null元素的排序规则(比如把null放在数组末尾),就能避免空指针错误,同时完整保留并打印整个数组的所有元素。

修改后的代码示例:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        Integer array[] = new Integer[10];
        for (int j = 0; j < number; j++) {
            array[j] = sc.nextInt();
        }
        
        // 自定义比较器:降序排序非null元素,null放在末尾
        Arrays.sort(array, (a, b) -> {
            if (a == null && b == null) return 0;
            if (a == null) return 1; // null元素排在后面
            if (b == null) return -1;
            return Integer.compare(b, a); // 非null元素降序排列
        });
        
        System.out.println(Arrays.toString(array));
        sc.close();
    }
}

代码说明

  • 当两个元素都是null时,视为相等,返回0;
  • 当其中一个元素是null时,指定null排在非null元素的后面;
  • 非null元素通过Integer.compare(b, a)实现降序排序(如果要升序则用Integer.compare(a, b));
  • 执行排序后,Arrays.toString()会完整输出数组的所有元素,包括未赋值的null位置。

内容的提问来源于stack exchange,提问作者Pronay Sarker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:44:58