【排序】【JAVA】P1104生日

在这里插入图片描述

思路:通过用学生类将同学的数据封装起来方便存储,再通过重写TreeSet集合的compare方法实现排序的要求。
注意:排序规则是生日从大到小,也就是出生年龄靠前的排在前面,而不是数值大的在前面
输入靠前和靠后通过自定义的id存放,输入输入靠后的先输出,也就是大的排前面

对于compare如何自定义数值大小排序,规则 从小到大,s1-s2 从大到小,s2-s1

package LOQ.排序; import java.util.Comparator; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class P1104生日 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //创建集合 生日大的出生日期靠前,所以按照出生日期小的排前面 Set<Student> set = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { int num = s1.getYear()-s2.getYear(); int num1 = num==0 ? s1.getMonth()-s2.getMonth():num; int num2 = num1==0 ? s1.getDay()-s2.getDay() : num1; //靠后的先输出,也就是大的先输出 int num3 = num2==0 ? s2.id-s1.id : num2; return num3; } }); //输入数据 sc.nextLine(); for(int i=1;i<=n;i++) { //创建学生对象 Student student = new Student(); student.name = sc.next(); student.birthdayStr = sc.nextLine().split(" "); //输入顺序 student.id = i; //添加到集合 set.add(student); } //输出结果 int i=1; for(Student s:set) { if(i<=n) { System.out.println(s.name); } i++; } } static class Student{ int id; String name; String[] birthdayStr; //得到生日 birthdayStr[0]是空格要跳过 private int getYear() { return Integer.parseInt(birthdayStr[1]); } private int getMonth(){ return Integer.parseInt(birthdayStr[2]); } private int getDay() { return Integer.parseInt(birthdayStr[3]); } } }

__EOF__

本文作者lnnau
本文链接https://www.cnblogs.com/wlunan/p/15948464.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Lnnau  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示