我昨晚发布了一个有关此问题的问题,但仍在挣扎。我需要首先按姓名(在此格式中姓氏、名字)对文本文件中的学生列表进行排序,然后按考试成绩进行排序。我不知道文本文件中有多少学生,除了少于 100 名之外。我必须使用compareTo 方法(我认为我做得正确)和一个数组(我不认为我'我正确使用这个)。我已经连续几个小时在搞这个了,但我似乎不明白。教科书似乎确实对我没有任何帮助。如何让我的应用程序类打印排序的学生姓名/成绩?
其他规范是获取分数的平均值,并在低于平均分数的任何分数旁边进行评论。不过,在理清排序之后我可以继续处理这些问题。
这是我的代码...
package CH11AS8App;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class kjkkkkkkkkkkk {
public static void main( String[] args ) throws Exception {
// TODO Auto-generated method stub
Scanner aScanner = new Scanner(
new FileReader("src//chapt11//ch11AS8data.txt"));
int numOfStudents = 100;
Student[] studentArray = new Student[numOfStudents];
Scanner sc = null;
int counter = 0;
while (aScanner.hasNext()) {
sc = new Scanner(aScanner.nextLine());
String lastName = sc.next();
String firstName = sc.next();
int score = sc.nextInt();
studentArray[counter++] = new Student(lastName, firstName, score);
studentArray[counter] = new Student(lastName, firstName, score);
int average= 0;
int sum = 0;
sum += score;
if (counter < numOfStudents);
average = sum / counter;
if (score <= (average - 10)) {
System.out.println("Score 10 points under average");
System.out.println("Student Average:" + average);
}
sc.close();
// Display Welcome Message
System.out.println("Welcome to the Student Scores Application.\n");
//Sort Names
Arrays.sort(studentArray,0,counter, new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2) {
return s1.getLastName().compareTo(s2.getLastName());
}
});
System.out.println();
System.out.println("Student list by name:");
System.out.println();
for(int j = 0; j < counter; j++){
System.out.println(studentArray[j]);
}
//Sort Scores
Arrays.sort(studentArray,0,counter, new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2) {
return Integer.valueOf(s2.getScore()).
compareTo(Integer.valueOf(s1.getScore()));
}
});
System.out.println();
System.out.println();
System.out.println("Student list by score:");
System.out.println();
for(int j = 0; j < counter; j++){
System.out.println(studentArray[j]);
}
//Close Scanner
aScanner.close();
}
static class Student implements Comparable<Student> {
//Instance Variables
private String firstName;
private String lastName;
private int score;
//Getters & Setters
public Student( String firstName, String lastName, int score ) {
this.firstName = firstName;
this.score = score;
this.lastName = lastName;
}
public int getScore() {
return score;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
//CompareTo Method
@Override
public int compareTo( Student s ) {
if( !firstName.equalsIgnoreCase( s.firstName ) ) {
return firstName.compareToIgnoreCase( s.firstName );
}
if( !lastName.equalsIgnoreCase( s.lastName ) ) {
return lastName.compareToIgnoreCase( s.lastName );
}
return (new Integer(score)).compareTo((new Integer(s.score)));
}
@Override public String toString(){ return lastName + ", "+ firstName +" : "+score; }
}
}
最佳答案
您的错误位于 compareTo()
方法的最后一行:
改变
return examScore = s.examScore;
至
return examScore - s.examScore;
您想要返回差异,而不是设置实例变量!
关于java - 使用数组按姓名和分数对学生进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337667/