华中科技大学 成绩排序(java)

题目描述
有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);
						 }//这是个点,compareTo()
						 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;
	}
}



发布了252 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43306331/article/details/104253361