java - 使用数组按姓名和分数对学生进行排序

标签 java arrays sorting comparable compareto

我昨晚发布了一个有关此问题的问题,但仍在挣扎。我需要首先按姓名(在此格式中姓氏、名字)对文本文件中的学生列表进行排序,然后按考试成绩进行排序。我不知道文本文件中有多少学生,除了少于 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/

相关文章:

java - Windows 中的 Tensorflow Java API

java - 找到 JTable 单元格并绘制它

algorithm - 给定一个实数列表。什么是将它们分组在一起以使组中的最大值和最小值小于 5 的好算法?

python - 计算合并排序中的反转次数

java - 交换排序算法查询

java - 我对 XPath 做错了什么?

java - 在 JFreeChart 中将原点从 (0,0) 移动到 (0,50)

php - 在 PHP 中填充多维数组

javascript - NodeJS : how to separate large strings into an array of numbers, 然后添加所有具有偶数索引的

java - 在数组中查找一定数量的相邻条目