每日作业1209

在这里插入图片描述

成绩排名
输入多个学生的姓名和成绩, 打印其名称 成绩和排名
输入:
第一行: 整数N 表示有N个学生
第二行开始, 每行一个字符串和一个整数Mi, 表示学生姓名和成绩
输出:
(1<=N<=100, 0<=Mi<=100)
按成绩从高到低的顺序打印每个学生的姓名,成绩, 排名
(需要注意的是, 如果成绩相同, 则排名并列)
样例输入
6
张三 80
李四 90
王五 85
赵六 85
李雷 90
韩梅梅 100
样例输出:
韩梅梅 100 1
李雷 90 2
李四 90 2
王五 85 3
赵六 85 3
张三 80 4

方式一

//数组写法
public class Task12091 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("输入学生的数量");
		int num = input.nextInt();
		//创建一个二维数组
		String[][] student = new String[num][2];
		//使用for循环添加数据
		for(int i = 0; i < num; i++) {
			System.out.println("输入学生的姓名");
			student[i][0] = input.next();
			System.out.println("输入学生的成绩");
			student[i][1] = input.next();
		}
		
		Arrays.sort(student, new Comparator<Object>() {

			@Override
			public int compare(Object o1, Object o2) {
				if(o1 instanceof String[] && o2 instanceof String[]) {
					String[] s1 = (String[]) o1;
					String[] s2 = (String[]) o2;
					return -s1[1].compareTo(s2[1]);
				}
				throw new RuntimeException("输入的数据类型不一致");
			}
		});
		//此时数组内容已经按照成绩顺序排好序,下面是排名的问题,同分同名次
		//此时数组里第一个人成绩以及是最高的,我们需要比较的是后面的人的成绩和他是否想等
		int randk = 0; //没有第0名
		String lastScore = "-1"; //上一个人的成绩
		
		for (int i = 0; i < student.length; i++) {
			if(!(student[i][1].equals(lastScore))){
				lastScore = student[i][1];
				randk++;
			}	
			System.out.println("姓名:" + student[i][0] + " 成绩" + student[i][1] + " 排名:" + randk);
		}
	}
}

运行结果
在这里插入图片描述
方式二

public class Task1209 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入学生的数量");
		int n = input.nextInt(); //存储学生数量
		int rank = 0; //存储排名
		int lastScore = -1; //存储上一个学生的成绩
		List<Student> list = new ArrayList<Student>();
		for(int i = 0; i < n; i++) {
			Student s = new Student();
			System.out.println("请输入学生的姓名");
			s.setName(input.next());
			System.out.println("请输入学生的成绩");
			s.setScore(input.nextInt());
			list.add(s);
		}
		
		Collections.sort(list, new Comparator<Student>() {

			@Override
			public int compare(Student o1, Student o2) {
				
				return o2.getScore() - o1.getScore();
			}
		});;
		
		for (int i = 0; i < list.size(); i++) {
			if((list.get(i).getScore() - lastScore) != 0) {
				lastScore = list.get(i).getScore();
				rank++;
			}
			System.out.println("姓名:" + list.get(i).getName() + "成绩:" + list.get(i).getScore() + 
					"名次" + rank);
		}
		
	}
}
public class Student {
	private String name;
	private int score;
	
	public Student() {
	}

	public String getName() {
		return name;
	}

	public int getScore() {
		return score;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return  name + " " + score + " ";
	}

}

方式三

public class Task1209 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入学生的数量");
		int n = input.nextInt(); //存储学生数量
		int rank = 0; //存储排名
		int lastScore = -1; //存储上一个学生的成绩
		List<Student> list = new ArrayList<Student>();
		for(int i = 0; i < n; i++) {
			Student s = new Student();
			System.out.println("请输入学生的姓名");
			s.setName(input.next());
			System.out.println("请输入学生的成绩");
			s.setScore(input.nextInt());
			list.add(s);
		}
		
		Collections.sort(list);
		
		for (int i = 0; i < list.size(); i++) {
			if((list.get(i).getScore() - lastScore) != 0) {
				lastScore = list.get(i).getScore();
				rank++;
			}
			System.out.println("姓名:" + list.get(i).getName() + "成绩:" + list.get(i).getScore() + 
					"名次" + rank);
		}
		
	}
}
public class Student implements Comparable<Student>{
	private String name;
	private int score;
	
	public Student() {
	}

	public String getName() {
		return name;
	}

	public int getScore() {
		return score;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return  name + " " + score + " ";
	}

	@Override
	public int compareTo(Student o) {
		// TODO 自动生成的方法存根
		return o.getScore() - this.getScore();
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用Hutool的CollUtil和ComparatorUtil工具类来对List<Map<Integer,String>>进行排序,具体代码如下: ``` List<Map<Integer, String>> list = CollUtil.newArrayList(); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "供方自送").put(2, "順德").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "供方自送").put(2, "河源").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "龍崗").put(2, "公明").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "公明").put(2, "沙井").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "福永").put(2, "龍華").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "布吉").put(2, "觀瀾").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "公明").put(2, "石岩").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "橫崗").put(2, "觀瀾").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "布吉").put(2, "沙井").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "觀瀾").put(2, "龍華").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "龍華").put(2, "西麗").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "公明").put(2, "觀瀾").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "惠州").put(2, "坦洲").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "中山").put(2, "中山").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "中山").put(2, "坦洲").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "中山").put(2, "茶山").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "塘廈").put(2, "鳳崗").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "橋頭").put(2, "長安").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "長安").put(2, "厚街").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "虎門").put(2, "長安").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "石碣").put(2, "鳳崗").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "石龍").put(2, "長安").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "橋頭").put(2, "長安").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "橫瀝").put(2, "鳳崗").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "長安").put(2, "長安").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "石碣").put(2, "莞城").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "塘廈").put(2, "沙田").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "茶山").put(2, "石龍").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "大岭山").put(2, "長安").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "厚街").put(2, "長安").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "石龍").put(2, "茶山").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "松崗").put(2, "石龍").build()); list.add(CollUtil.builder(new HashMap<Integer, String>()).put(1, "塘廈").put(2, "茶山").build()); CollUtil.sort(list, ComparatorUtil.comparing(map -> map.get(2), ComparatorUtil.nullLowComparator(String::compareToIgnoreCase)).thenComparing(map -> map.get(1))); System.out.println(list); ``` 这段代码首先使用CollUtil的builder方法创建Map并添加元素。后使用CollUtil工具类的sort方法对List<Map<Integer,String>>进行排序,首先按照第二列元素(地点)进行排序,如果第二列元素相同,则按照第一列元素(编号)进行排序。最后输出排好序的List<Map<Integer,String>>。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值