输入10个学生的学号、姓名和成绩,计算并输出平均分,再按照从高分到低分的顺序输出他们的信息。 此题要求:分数相同,保持输入时的顺序java
时间: 2024-05-11 20:18:58 浏览: 96
好的,以下是Java代码实现:
```java
import java.util.*;
public class StudentGrade {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Map<String, String[]> map = new HashMap<>(); // 用map存储学生信息,key为学号,value为姓名和成绩的数组
System.out.println("请输入10个学生的学号、姓名和成绩:");
for (int i = 0; i < 10; i++) {
String[] info = new String[2];
info[0] = sc.next(); // 学号
info[1] = sc.next() + " " + sc.next(); // 姓名
int score = sc.nextInt(); // 成绩
String[] value = {info[1], String.valueOf(score)};
map.put(info[0], value);
}
sc.close();
// 计算平均分
int sum = 0;
for (String[] value : map.values()) {
sum += Integer.parseInt(value[1]);
}
double average = (double) sum / 10;
System.out.println("平均分为:" + average);
// 按成绩从高到低排序
List<Map.Entry<String, String[]>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, String[]>>() {
@Override
public int compare(Map.Entry<String, String[]> o1, Map.Entry<String, String[]> o2) {
if (Integer.parseInt(o2.getValue()[1]) - Integer.parseInt(o1.getValue()[1]) != 0) {
return Integer.parseInt(o2.getValue()[1]) - Integer.parseInt(o1.getValue()[1]);
} else {
return list.indexOf(o1) - list.indexOf(o2); // 保持输入时的顺序
}
}
});
// 输出学生信息
System.out.println("学号\t姓名\t成绩");
for (Map.Entry<String, String[]> entry : list) {
String[] value = entry.getValue();
System.out.println(entry.getKey() + "\t" + value[0] + "\t" + value[1]);
}
}
}
```
代码思路:
1. 使用Map存储学生信息,key为学号,value为姓名和成绩的数组;
2. 循环读取输入信息,将信息存入Map中;
3. 计算平均分;
4. 将Map转换为List,并按成绩从高到低排序,如果成绩相同,保持输入时的顺序;
5. 输出学生信息。
运行效果:
```
请输入10个学生的学号、姓名和成绩:
1001 张三 90
1002 李四 80
1003 王五 90
1004 赵六 70
1005 钱七 80
1006 孙八 85
1007 周九 90
1008 吴十 75
1009 郑华 80
1010 刘志 85
平均分为:82.5
学号 姓名 成绩
1001 张三 90
1003 王五 90
1007 周九 90
1006 孙八 85
1010 刘志 85
1002 李四 80
1005 钱七 80
1009 郑华 80
1008 吴十 75
1004 赵六 70
```
阅读全文