【发布时间】:2013-12-01 18:23:12
【问题描述】:
我计算每个学生的总分。然后我将这些对象添加到数组列表中。我想要做的是基于这个总分(不是学生对象的属性),对我的数组列表进行排序并用总分显示学生详细信息。我不知道该怎么做。有人可以建议我一个很好的优化我来完成这项工作吗??
public static void TotalModuleMarkAboveAvg(){
double totalModuleMarkAvg = OverallClassAverage(false); //getting the avg of the total marks
ArrayList<Student> students = new ArrayList<Student>();
double studentTotalModuleMark = 0.0;
student = new Student();
System.out.println("List of students whose total module marks fall below the class average ");
for(int i=0; i<MAX_STUDENT; i++){
Student student = vector.get(i);
studentTotalModuleMark = student.getCoursework1()*20/100;
studentTotalModuleMark += student.getCoursework2()*20/100;
studentTotalModuleMark += student.getFinalExam()*60/100;
if(studentTotalModuleMark > totalModuleMarkAvg){
students.add(student);
}
// here I want to sort my array list based on the studentTotalModuleMark and display student registration number and total module mark
}
}
学生班
public class Student implements java.io.Serializable{
private int registrationNumber;
private int coursework1;
private int coursework2;
private int finalExam;
public int getRegistrationNumber() {
return registrationNumber;
}
public void setRegistrationNumber(int registrationNumber) {
this.registrationNumber = registrationNumber;
}
public int getCoursework1() {
return coursework1;
}
public void setCoursework1(int coursework1) {
this.coursework1 = coursework1;
}
public int getCoursework2() {
return coursework2;
}
public void setCoursework2(int coursework2) {
this.coursework2 = coursework2;
}
public int getFinalExam() {
return finalExam;
}
public void setFinalExam(int finalExam) {
this.finalExam = finalExam;
}
}
【问题讨论】:
-
如果没有总数作为字段,排序将是一个真正令人头疼的问题。您需要一个相应的数组来保存总数。在手动对 Arraylist 进行排序时,对相应的数组索引进行排序。为什么不将总数作为一个字段?
-
另外,我感觉您希望将 ArrayList 放在方法之外。更有意义。
-
为什么你的方法中有两个学生变量。不好的做法。
-
是的,因为总可以导出运行时间,以为我不需要它作为字段。我可以改变每个模块运行时的权重。但似乎除了将总计添加为字段之外,我别无选择。
-
你不需要它,但你真的想要它。如果你有它作为一个字段,你可以使用神奇的
Collections.sort()技巧。只需要让您的方法实现可比较。我会提出一个答案,但要告诉你
标签: java oop sorting arraylist