JAVA 利用List集合Set集合计算学生成绩排名,总分,平均分
import java.util.*;
public class Grade {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
Map<String,Double> map=new HashMap<>(); //创建一个泛型map,key存姓名,value存成绩
System.out.println("请输入你录入的学生人数");
int num=s.nextInt(); //记录输入学生个数
for(int i=0;i<num;i++){
try{ //录入成绩
System.out.println("请输入姓名:");
String Id=s.next(); //存姓名
System.out.println("请输入成绩:");
Double score=s.nextDouble(); //存成绩
map.put(Id,score); //放入map中
}catch (Exception e){
System.out.println("输入错误,请重新输入!");
i--;
continue;
}
}
//将所有成绩取出存入一个集合
Collection<Double> co= map.values();
Double result=0d; //用于计算总分
for(Double sa:co){
result+=sa;
}
System.out.println("总分是:" + result + " 平均分:" + (result / co.size()));
//用于存不重复的分数
Set<Double> score=new HashSet<>(); //存入的值不重复
score.addAll(co); //将所有分数存入set集合
//复制给list集合方便排序
List<Double> list=new ArrayList<>();
list.addAll(score);
//排序,这个默认排序是从小到大
Collections.sort(list);
//将顺序翻转,变成从大到小
Collections.reverse(list);
int count=1; //用于记录名次
for(Double sc:list){
for(Map.Entry entey: map.entrySet()){ //需要把成对的值取出
if(entey.getValue()==sc){ //判断是第几名
//输出名次与对应的人名
System.out.println("第"+count+"名是:"+entey.getKey()+" 分数是:"+sc);
}
}
count++;
}
}
}
由于总分是定义的double类型的,计算出的平均分是带多位小数的,这里写得不太好。![在这里插入图片描述](https://img-blog.csdnimg.cn/202011191实现效果