students
配列を姓、名の順に並べ替えることができるはずです。私のcompareTo
方法は、最後の反復まで機能します。その後、 a がスローされ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