题目描述
职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。输入描述:
输入第一行包括1个整数N,1<=N<=30,代表输入数据的个数。
接下来的N行有N个职工的信息:
包括职工号(整数), 姓名(字符串,长度不超过10), 年龄(1<=age<=100)。
输出描述:
可能有多组测试数据,对于每组数据,
输出结果行数为N和3的较小值,分别为年龄最小的职工的信息。
关键字顺序:年龄>工号>姓名,从小到大。
输入例子:
5
501 Jack 6
102 Nathon 100
599 Lily 79
923 Lucy 15
814 Mickle 65
输出例子:
501 Jack 6
923 Lucy 15
814 Mickle 65
思路:简单的比较器实现,不建议把worker类写成比较类,因为这不符合面向对象的思想。
比较器建议用匿名内部类的形式。
package huazhongUniversity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class SmallestThree {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=br.readLine())!=null){
int n=Integer.parseInt(line);
ArrayList<Worker> alist=new ArrayList<Worker>();
for(int i=0;i<n;++i){
line=br.readLine();
String [] strs=line.split(" ");
alist.add(new Worker(Integer.parseInt(strs[0]),strs[1],Integer.parseInt(strs[2])));
}
Collections.sort(alist,new Comparator<Worker>(){
public int compare(Worker w1,Worker w2){
if(w1.age<w2.age){
return -1;
}
else if(w1.age>w2.age){
return 1;
}
else{
if(w1.id<w2.id){
return -1;
}
else if(w1.id>w2.id){
return 1;
}
else{
return w1.name.compareTo(w2.name);
}
}
}
});
for(int i=0;i<3;++i){
System.out.println(alist.get(i));
}
}
}
}
class Worker {
int id;
String name;
int age;
Worker(int id,String name,int age){
this.id=id;
this.name=name;
this.age=age;
}
public String toString(){
String s="";
return s+this.id+" "+this.name+" "+this.age;
}
}