无法理解Arrays.sort()功能

use*_*435 0 java nullpointerexception

我是Java的新手,我正在尝试理解比较器接口.我尝试了以下代码:

package comparator;

import java.io.*;
import java.util.*;

public class comparator {
    public static void main(String args[]){
        bankAccount[] ba=new bankAccount[500];
        ba[0]=new bankAccount(50);
        ba[1]=new bankAccount(90);
        ba[2]=new bankAccount(20);
        Comparator c=new comparing();
        System.out.println(c.compare(ba[0], ba[1]));
        Arrays.sort(ba, c);
    }
}

class bankAccount{
    public bankAccount(double bal){
        balance=bal;
    }
    public double balance;
}

class comparing implements Comparator{
    public int compare(Object first, Object second){
        bankAccount ba1=(bankAccount)first;
        bankAccount ba2=(bankAccount)second;
        int retval;
        if(ba1.balance<ba2.balance){
            retval=-1;
        }
        else if(ba1.balance>ba2.balance){
                retval=1;
            }
        else{
            retval=0;
        }
        return retval;
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

Exception in thread "main" java.lang.NullPointerException
    at comparator.comparing.compare(comparator.java:29)
    at java.util.TimSort.binarySort(TimSort.java:265)
    at java.util.TimSort.sort(TimSort.java:208)
    at java.util.TimSort.sort(TimSort.java:173)
    at java.util.Arrays.sort(Arrays.java:659)
    at comparator.comparator.main(comparator.java:13)
Run Code Online (Sandbox Code Playgroud)

我能知道错误是什么吗?我应该如何使用Arrays.sort()方法.任何帮助将是真诚的感谢.

Pla*_*ure 8

在你的main方法中,你已经声明了一个500长度的数组但只初始化了3个元素,所以其中有497个null.这会导致比较器出现问题,因为比较器被调用了许多元素对,包括其中的一些元素null.

尝试修改您的main方法以仅声明和初始化3长度数组并再次编译和运行它.也许你的比较器确实存在问题,但至少让我们删除明显的问题并尝试对所有元素进行排序null.