Java LinkedList 集合的使用之平均成績降序排列
阿新 • • 發佈:2018-12-24
題目:
資訊學院年終評定獎學金,需要對整個年級的學生按照平均分數進行排名。
要求:根據輸入的學號和平均成績,按照平均成績降序輸出學號,如果平均成績相同,按照輸入的順序輸出。
一
首先要寫一個學生類,儲存每個學生的資訊,包括學號,平均成績
package Work3; public class Student { private String id; private double grade; public Student(String id, double grade) { this.id = id; this.grade = grade; } public Student() {} public String getId() { return this.id; } public void setId(String id) { this.id = id; } public double getGrade() { return this.grade; } public void setGrade(double grade) { this.grade = grade; } public String toString() { return "Student [id=" + id + ", grade=" + grade + "]"; } }
二、寫一個測試的主類,按降序排列輸出學生的資訊
注意:1,降序排列需要用到集合排列函式Collections.sort()函式,
Collections.sort(list); 預設是按照升序排列
降序排列時需要自己寫一個排列函式,但是Java提供了一個比較器new Comparator(),可以將比較規則寫入這個 比較器函式
Collections.sort(list,new Comparator<Student>()
{
public int compare(Student stu1, Student stu2)
{
return (int) (stu2.getGrade()-stu1.getGrade());
}
}
);
2,輸出結果時,如果在學生類裡面已經寫了輸出函式,在主函式中寫輸出時,直接就可以for迴圈遍歷陣列輸出,但是如果在學生類裡面沒有寫顯示函式,則需要在主函式裡面呼叫get函式
全部程式碼
package Work3;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Sop {
public static void main(String[] args)
{
List<Student>list=new LinkedList<Student>();
int n;
Scanner cin=new Scanner(System.in);
System.out.println("輸入學生的總人數");
n=cin.nextInt();
System.out.println("輸入學生的學號,平均成績");
for(int i=0;i<n;i++)
{
String id=cin.next();
double grade=cin.nextDouble();
Student student=new Student(id, grade);
list.add(student);
}
cin.close();
Collections.sort(list,new Comparator<Student>()
{
public int compare(Student stu1, Student stu2)
{
return (int) (stu2.getGrade()-stu1.getGrade());
}
}
);
for(int i=0;i<list.size();i++)
{
//System.out.println(list.get(i).getId()+" "+list.get(i).getGrade());
System.out.println(list.get(i));
}
}
}