我下面的这段代码为啥会报这个错:Exception in thread "main" java.lang.NullPointerException
people数组里有元素是null,
为队列数组赋值,然后问题就解决了
问题的原因是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++;
}
}
}
}