我应该能够students
按姓氏对数组进行排序,然后是名字。我的compareTo
方法适用于它,直到最后一次迭代。然后它抛出一个NullPointerException
,我不知道为什么。我已经在我的书和互联网上搜索了将近 12 个小时。我已经尝试了我找到的所有东西,但仍然没有骰子。
这是程序的代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ch11pr112;
import java.io.*;
import java.util.Arrays;
/**
*
* @author Tytus
*/
public class CH11PR112{
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
// TODO code application logic here
BufferedReader in = new BufferedReader(new FileReader("src//ch11pr112//Students.txt"));
Student[] students = new Student[100];
int i = 0;
double sum = 0;
String line = in.readLine();
while (line != null)
{
String[] studentParts = line.split(" ");
String firstName = studentParts[1];
String lastName = studentParts[0];
Double score = Double.parseDouble(studentParts[2]);
students[i] = new Student(firstName, lastName, score);
sum += score;
i++;
line = in.readLine();
}
double average = sum / i;
double x = i;
Arrays.sort(students);
for (i = 0; i < x; i++)
{
String studentList = students[i].getLastName() + " " + students[i].getFirstName() + " " + students[i].getScore();
if (students[i].getScore() < (average - 10))
{
System.out.println(studentList + " BELOW AVERAGE");
}
else
{
System.out.println(studentList);
}
}
System.out.println();
System.out.println("Average:\t" + average);
}
}
这是我的 Students.txt 文件中的数据:
Gator Ali 85
Vator Ella 75
Beam John 60
Beam James 95
Class Lastin 55
Steelman Andrea 95
Murach Joel 92
Lowe Doug 82
Murach Mike 93
这是我的 Student.java 文件中的代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ch11pr112;
/**
*
* @author Tytus
*/
public class Student implements Comparable<Student>{
private String firstName;
private String lastName;
private double score;
public Student(String firstName, String lastName, double score)
{
this.firstName = firstName;
this.lastName = lastName;
this.score = score;
}
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
public double getScore()
{
return score;
}
public void setScore(double score)
{
this.score = score;
}
@Override
public int compareTo(Student x) {
int lastNameCompare = this.lastName.compareToIgnoreCase(x.getLastName());
if (this.lastName != null && x.lastName != null)
{
if (lastNameCompare == 0)
{
int firstNameCompare = this.firstName.compareToIgnoreCase(x.getFirstName());
if (this.firstName != null && x.firstName != null)
{
if (firstNameCompare == 0)
{
return 0;
}
else if (firstNameCompare > 0)
{
return 1;
}
else if (firstNameCompare < 0)
{
return - 1;
}
}
}
else if (lastNameCompare > 0)
{
return 1;
}
else if (lastNameCompare < 0)
{
return - 1;
}
}
return 0;
}
}
出于某种原因,它在文件NullPointerException
的第 232 行(if (pivot.compareTo(a[mid]) < 0)
)的最后一次迭代期间创建了一个ComparableTimSort.java
。
问题是NullPointerException
如果lastName
或firstName
变量是null
.