题目描述
有N个学生的数据,将学生数据按成绩从高到低排序,如果成绩相同则按姓名字符的字典序排序,如果姓名的字典序也相同则按照学生的年龄从小到大排序,并输出N个学生排序后的信息。
输入描述:
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
输出描述:
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩
学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。
示例1
输入
复制
3
abc 20 99
bcd 19 97
bed 20 97
输出
复制
bcd 19 97
bed 20 97
abc 20 99
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.* ;
public class Main
{
static char[] pre;
static char[] in;
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str=br.readLine()) != null) {
ArrayList<Student> list = new ArrayList<>();
int n = Integer.parseInt(str);
for(int i = 0; i < n; i++) {
String[] parts = br.readLine().split(" ");
list.add(new Student(parts[0], Integer.parseInt(parts[1]), Integer.parseInt(parts[2])));
}
Collections.sort(list, new Comparator<Student>()
{
public int compare(Student o1, Student o2) {
if(o1.score != o2.score) return o1.score - o2.score;
else if(o1.name.compareTo(o2.name) != 0) {
return o1.name.compareTo(o2.name);
}
else return o1.age - o2.age;
}
});
for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i).name+" "+list.get(i).age+" "+list.get(i).score);
System.out.println();
}
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
class Student{
String name;
int age;
int score;
Student(String x, int y, int z){
name = x;
age = y;
score = z;
}
}