我下面的这段代码为啥会报这个错?

我下面的这段代码为啥会报这个错:Exception in thread "main" java.lang.NullPointerException

img

people数组里有元素是null,

img


你这里设置的 都是 第一个元素呀,其他三个元素都是 null呀

img

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/205362
  • 除此之外, 这篇博客: 基数排序队列实现时空指针异常Exception in thread "main" java.lang.NullPointerException中的 解决方法: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 为队列数组赋值,然后问题就解决了
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    问题的原因是radixSort方法中的temp数组没有被正确初始化,导致在执行temp[ys].add(arr[j])时,抛出了java.lang.NullPointerException异常。具体地,问题出在代码int[] temp = new int[10]上,采用这种写法只是创建了一个具有10个元素,并且默认值都为0的int数组,并没有把每一个元素初始化成MyQueue队列,所以在执行temp[ys].add(arr[j])时,就会抛出NullPointException异常。

    解决该问题的方案是修改代码int[] temp = new int[10],将int数组改成MyQueue数组,并在创建MyQueue数组时,对每个元素都执行new操作,如MyQueue[] temp = new MyQueue[10]; for(int i=0;i<temp.length;i++){ temp[i] = new MyQueue(); },这样就能保证在执行temp[ys].add(arr[j])时,temp[ys]一定是MyQueue对象,不会抛出NullPointException异常。修改之后的radixSort方法代码如下:

    public static void radixSort(int[] arr){
        //存储数组中最大的数字
        int max = Integer.MIN_VALUE;
        for(int i=0;i<arr.length;i++){
            if(arr[i]>max){
                max=arr[i];
            }
        }
        //计算最大数字是几位数
        int maxLength = (max+"").length();
        //用于临时存储数据的队列的数组
        MyQueue[] temp = new MyQueue[10];
        //为队列数组赋值
        for(int i=0;i<temp.length;i++){
            temp[i] = new MyQueue();
        }
        //根据最大长度的数决定比较的次数
        for(int i=0,n=1;i<maxLength;i++,n*=10){
            //把每一个数分别计算余数
            for(int j=0;j<arr.length;j++){
                //计算余数
                int ys = arr[j]/n%10;
                //把当前遍历的数据放入指定的队列中
                temp[ys].add(arr[j]);
            }
            //记录取的元素需要放的位置
            int index=0;
            //把所有队列中的数字取出来
            for(int k=0;k<temp.length;k++){
                //循环取出元素
                while(!temp[k].isEmpty()){
                    //取出元素
                    arr[index]=temp[k].poll();
                    //记录下一个位置
                    index++;
                }
            }
        }
    }