您的位置:首页 > 编程语言 > Java开发

最小年龄的3个职工(解题报告)

2017-05-15 18:59 393 查看

题目描述

职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。

[b]输入描述:[/b]
输入第一行包括1个整数N,1<=N<=30,代表输入数据的个数。
接下来的N行有N个职工的信息:
包括职工号(整数), 姓名(字符串,长度不超过10), 年龄(1<=age<=100)。


[b]输出描述:[/b]
可能有多组测试数据,对于每组数据,
输出结果行数为N和3的较小值,分别为年龄最小的职工的信息。
关键字顺序:年龄>工号>姓名,从小到大。


[b]输入例子:[/b]
5
501 Jack 6
102 Nathon 100
599 Lily 79
923 Lucy 15
814 Mickle 65


[b]输出例子:[/b]
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息