任何人都知道为什么这段代码会返回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;
}
}
}
答案 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();
周期的填充程度。