手动数组排序返回nullpointerexception

时间:2015-02-13 15:25:44

标签: java arrays sorting

任何人都知道为什么这段代码会返回nullpointerexception?它应该按字母顺序对数组进行排序,但它没有执行该功能。

public void borrowerSort() throws IOException {
        String inputFile = "Borrower Details.txt";
        String outputFile = "Borrower Details2.txt";

        FileReader txtArranger = new FileReader(inputFile);
        BufferedReader txtReader = new BufferedReader(txtArranger);



        for(int i = 0; i <= inputFile.length(); i ++)
        {
            borrowerDetails[i] = txtReader.readLine();
//      
//          System.out.println(borrowerDetails[i]);
//      System.out.println();
        }

        //System.out.println(borrowerDetails[0] + borrowerDetails[2]);
        for(int j = 0; j < borrowerDetails.length - 1; j ++)
        {
            for(int k = j + 1; k < borrowerDetails.length; k ++)
            {
                if(borrowerDetails[j].compareTo(borrowerDetails[k]) > 0){
                    String store = borrowerDetails[j];
                    borrowerDetails[j] = borrowerDetails[k];
                    borrowerDetails[k] = store;

                }

            }
        }

2 个答案:

答案 0 :(得分:4)

    String inputFile = "Borrower Details.txt";

    for(int i = 0; i <= inputFile.length(); i ++)
    {
        borrowerDetails[i] = txtReader.readLine();

无法从文件的名称的长度派生文件大小。

使用List<String>读取行,复制到数组并对其进行排序。

List<String> lines = new ArrayList<>();
String line;
while( (line = txtReader.readLine()) != null ){
    lines.add( line );
}

NPE的原因是由于String [] borrowerDetails的分配不正确。如果此数组长于文件中的行数(!),则某些数组元素保持为null,这会在调用borrowerDetails[j].compareTo(...)时导致NPE

答案 1 :(得分:0)

似乎你有固定大小的对象数组borrowerDetails,而输入的txt文件并不能保证这个数组完全填满。空数组的对象初始化为空,所以如果你不完全填充它,你最终会尝试执行导致NPE的object.lenght > null之类的操作。 请尝试跟踪并检查borrowerDetails[i] = txtReader.readLine();周期的填充程度。