7-1 sdut-List--C~K的班级(I) (10 分)
点击查看题目
经过不懈的努力,C~K终于当上了班主任。
现在他要统计班里学生的名单,但是C~K在教务系统中导出班级名单时出了问题,发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个, 但是工作量太大了,所以找到了会编程的你,你能帮他解决这个问题吗?
输入格式:
第一行输入一个N,代表C~K导出的名单共有N行(N<100000).
接下来的N行,每一行包括一个同学的信息,学号 姓名 年龄 性别。
输出格式:
第一行输出一个n,代表删除重复名字后C~K的班级共有几人。
接下来的n行,输出每一个同学的信息,输出按照输入的顺序。
输入样例:
6
0001 MeiK 20 M
0001 MeiK 20 M
0002 sdk2 21 M
0002 sdk2 21 M
0002 sdk2 21 M
0000 blf2 22 F
结尾无空行
输出样例:
3
0001 MeiK 20 M
0002 sdk2 21 M
0000 blf2 22 F
结尾无空行
思路:
- 首先想到的是 LinkHashSet,使用后对一半,错一半,
- 上网查后改用ArrayList,和也是对一半
- 查看标准代码:错误原因是:
年龄需要用int类型,性别需要用char类型
错误代码:使用Set
import java.util.*; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); Set set=new LinkedHashSet(); int n=sc.nextInt(); while(n-->=0) { String x=sc.nextLine(); set.add(x); } System.out.println(set.size()-1); Iterator cnt = set.iterator(); int flag=1; while(cnt.hasNext()) { Object t=cnt.next(); if(flag==1) flag=0; else System.out.println(t); } sc.close(); } }
AC代码
import java.util.*; class Stu{ String num; String name; int age; char x; public Stu(String num,String name,int age,char x) { this.num=num; this.name=name; this.age=age; this.x=x; } public String toString() { return num+" "+name+" "+age+" "+x; } //必须要有,建议使用编译器自动生成 public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((num == null) ? 0 : num.hashCode()); result = prime * result + x; return result; } //必须要有,建议使用编译器自动生成 public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Stu other = (Stu) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (num == null) { if (other.num != null) return false; } else if (!num.equals(other.num)) return false; if (x != other.x) return false; return true; } } public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); ArrayList<Stu> st=new ArrayList<Stu>(); int n=sc.nextInt(); for(int i=0;i<n;i++) { Stu t=new Stu(sc.next(),sc.next(),sc.nextInt(),sc.next().charAt(0));//小技巧 if(!st.contains(t)) {//查询是否有重复元素,没有则加入 st.add(t); } } System.out.println(st.size()); for(Stu t:st) { System.out.println(t); } sc.close(); } }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/15556711.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步