我应该能够按姓氏,然后名字排序students
数组。我的compareTo
方法适用于它,直到最后一次迭代。然后它会抛出一个NullPointerException
,我不知道为什么。我一直在搜索我的书和互联网近12个小时。我尝试了我找到的所有东西,而且还没有骰子。Java NullPointerException排序数组
下面是程序代码:
/*
* 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;
}
}
由于某些原因,它在232行上最后一次迭代期间创建了NullPointerException
(if (pivot.compareTo(a[mid]) < 0)
)的ComparableTimSort.java
文件。
的问题是如何防止NullPointerException
,为什么当是不应该的代码,如果任一lastName
或firstName
变量null
要运行它被抛出。
你可以给堆栈跟踪的错误? – 2013-02-28 06:45:42
为什么你在'for循环'之前使用'double x = i',为什么不简单'int x = i'?任何具体的原因! – 2013-02-28 06:47:36
什么是ComparableTimSort.java – 2013-02-28 06:49:07