Q:信息学院年终评定奖学金,需要对整个年级的学生按照平均分数进行排名。
要求:根据输入的学号和平均成绩,按照平均成绩降序输出学号,如果平均成绩相同,按照输入的顺序输出。
package 集合类型数据操作;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Q3 {
public static void main(String[] args) {
Map<Integer, Double> map = new LinkedHashMap<Integer, Double>();
Scanner cin = new Scanner(System.in);
/*------两种输入方式------*/
/* ①任意输入,当输入终止条件时结束输入
while (cin.hasNext()) {
int number = cin.nextInt();
double score = cin.nextDouble();
if (score == -1) // 正确,当score输入-1时终止
break;
map.put(number, score);
}
while (cin.hasNext()) {
int number = cin.nextInt();
double score = cin.nextDouble();
if (number == -1) // number=-1,但score要输入值才可 结束 break;
map.put(number, score);
}
while (!cin.hasNext("-1")) { // number=-1,不用输score值即可结束输入
int number = cin.nextInt();
double score = cin.nextDouble();
map.put(number, score);
}
②先规定输入的个数n,for循环输入值
int n = cin.nextInt();
for (int i = 1; i <= n; i++) {
int num = cin.nextInt();
double sc = cin.nextDouble();
map.put(num, sc);
}
*/
cin.close();
// 先转成ArrayList集合
List<Map.Entry<Integer, Double>> list = new ArrayList<Map.Entry<Integer, Double>>(map.entrySet());
// 排序
Collections.sort(list, new Comparator<Map.Entry<Integer, Double>>() {
public int compare(Map.Entry<Integer, Double> o1, Map.Entry<Integer, Double> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
/*------输出结果------*/
/* ①只输出学号
for (Map.Entry<Integer, Double> mapping : list) {
System.out.println(mapping.getKey());
}
②输出学号和成绩(输出格式:学号=成绩)
for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }
③输出学号和成绩(输出格式:学号:成绩)
for(Map.Entry<Integer, Double> mapping:list) {
System.out.println(mapping.getKey()+":"+mapping.getValue()); }
*/
}
}