簡體   English   中英

如何基於數組中值的平均值以升序對類的實例進行排序?

[英]How to sort instances of a class based in ascending order based on the average of the values in an array?

我想按升序對學生班的3個對象進行排序
學生班級中float數組的計算平均值。 我創建了一個接受兩個參數並返回學生平均值的接口,但是我不確定如何根據所計算的平均值對學生班級的3個對象進行排序。

public class Student implements ICalculateAvg
{
    private String name;
    private String gender;
    private String idNumber;
    private Subject subject;

    //Getters and setters

    @Override
    public float calculateAverage(float firstGrade, float secondGrade) {
        return (firstGrade+secondGrade)/subject.getGrade().length;
    }
}

public class Subject 
{
    private String subjectCode[];
    private String  name[];
    private float grade[];

    //  Getters and setters
}

打印學生班級的內容會在下面產生以下輸出。

Student [name=Mary, gender=Female, idNumber=105, subject=Subject [subjectCode=[SPN3010, FRN1720], name=[Spanish, French], grade=[78.0, 98.0]]]
Student [name=John, gender=Male, idNumber=102, subject=Subject [subjectCode=[SPN3010, FRN1720], name=[Spanish, French], grade=[90.0, 91.0]]]
Student [name=James, gender=Male, idNumber=101, subject=Subject [subjectCode=[SPN3010, FRN1720], name=[Spanish, French], grade=[12.0, 34.0]]]

這是我主要方法中的一些內容。 我試圖使用比較器和可比較的接口來實現所需的結果,但無法使其正常工作。

float [] studenGrades1 = {12f, 34f};
float [] studenGrades2 = {90f, 91f};
float [] studenGrades3 = {78f, 98f};

Student student1 = new Student("James Brown", "Male", "101", new Subject(subjectCode, subjectName, studenGrades1));
Student student2 = new Student("John Doe", "Male", "102", new Subject(subjectCode, subjectName, studenGrades2));
Student student3 = new Student("Mary Jame", "Female", "105", new Subject(subjectCode, subjectName, studenGrades3));

float studentFinalGrade1 = student1.calculateAverage(student1.getSubject().getValueAtArrayIndex(0), student1.getSubject().getValueAtArrayIndex(1));
float studentFinalGrade2 = student2.calculateAverage(student2.getSubject().getValueAtArrayIndex(0), student2.getSubject().getValueAtArrayIndex(1));
float studentFinalGrade3 = student3.calculateAverage(student3.getSubject().getValueAtArrayIndex(0), student3.getSubject().getValueAtArrayIndex(1));

我沒有給出完整的代碼,而是給出了邏輯:

            Collections.sort(studentList, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                float grade1[] = s1.getSubject().getGrade();
                float grade2[] = s2.getSubject().getGrade();
                Float avg1=null;//calculate average from grade1
            Float avg2=null;//calculate average from grade2

            return avg1.compareTo(avg2);
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM