测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。 每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。 然后输出学生信息,按照如下格式: 姓名 年龄 成绩 学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。
3 abc 20 99 bcd 19 97 bed 20 97
bcd 19 97 bed 20 97 abc 20 99
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 Main { static class Student { String name; int age; int score; public Student() { } public Student(String name, int age, int score) { this.name = name; this.age = age; this.score = score; } @Override public String toString() { return name + " " + age + " " + score; } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ArrayList<Student> list = new ArrayList<>(); int n = Integer.parseInt(br.readLine()); for (int i = 0; i < n; i++) { String[] str = br.readLine().split(" "); Student st = new Student(str[0], Integer.parseInt(str[1]), Integer.parseInt(str[2])); list.add(st); } Collections.sort(list, new Comparator<Student>() { public int compare(Student o1, Student o2) { int num1= o1.score-o2.score; int num2= num1==0?o1.name.compareTo(o2.name):num1; int num3= num2==0?o1.age-o2.age:num2; return num3; } }); /*list.sort(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { int num1= o1.score-o2.score; int num2= num1==0?o1.name.compareTo(o2.name):num1; int num3= num2==0?o1.age-o2.age:num2; return num3; } });*/ for (Student ss : list) { System.out.println(ss); } } }
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int n = scanner.nextInt(); Student[] arr = new Student[n]; for (int i = 0; i < n; i++) arr[i] = new Student(scanner.next(),scanner.nextInt(),scanner.nextInt()); Arrays.sort(arr); for (Student student : arr) System.out.println(student); } } static class Student implements Comparable<Student>{ String name; Integer age; Integer score; public Student(String name, Integer age, Integer score) { this.name = name; this.age = age; this.score = score; } //将学生数据按成绩从低到高排序,如果成绩相同则按姓名字符的字典序由小到大排序,如果姓名的字典序也相同则按照学生的年龄从小到大排序 @Override public int compareTo(Student o) { if (this.score.compareTo(o.score)==0){ if (this.name.compareTo(o.name)==0) return this.age.compareTo(o.age); else return this.name.compareTo(o.name); }else return this.score.compareTo(o.score); } //姓名 年龄 成绩 @Override public String toString() { return name+" "+age+" "+score ; } } }
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
class Student {
private String name;
private int age;
private int grade;
public Student(String name, int age, int grade) {
this.name = name;
this.age = age;
this.grade = grade;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getGrade() {
return grade;
}
public String toString() {
return name + " " + age + " " + grade;
}
}
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int n = scan.nextInt();
List list = new ArrayList(n);
for (int i = 0; i < n; i++) {
String name = scan.next();
int age = scan.nextInt();
int grade = scan.nextInt();
list.add(new Student(name, age, grade));
}
Collections.sort(list, new MyComparator());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString());
}
}
}
private static class MyComparator implements Comparator {
@Override
public int compare(Student o1, Student o2) {
if (o1.getGrade() != o2.getGrade()) {
return o1.getGrade() > o2.getGrade() ? 1 : -1;
} else if (o1.getName().compareTo(o2.getName()) != 0) {
if (o1.getName().compareTo(o2.getName()) > 0) {
return 1;
} else {
return -1;
}
} else {
return o1.getAge() - o2.getAge();//默认升序
}
}
}
}
import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; /** * * @author shenling */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); while (sc.hasNext()){ int n = sc.nextInt(); Student[] stu = new Student[n]; sc.nextLine(); for (int i = 0; i < n; i++){ String[] info = sc.nextLine().split(" "); stu[i] = new Student(info[0], Integer.parseInt(info[1]), Integer.parseInt(info[2])); } Arrays.sort(stu, new MyComparator()); for (int i = 0; i < n; i++){ System.out.println(stu[i].getName() + " " + stu[i].getAge() + " " + stu[i].getScore()); } } } } class MyComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { if (o1.getScore() > o2.getScore()){ return 1; } else if (o1.getScore() < o2.getScore()){ return -1; } else{ if (o1.getName().compareTo(o2.getName()) > 0){ return 1; } else if (o1.getName().compareTo(o2.getName()) == 0){ if (o1.getAge() > o2.getAge()){ return 1; } else if (o1.getAge() < o2.getAge()){ return -1; } else{ return 0; } } else{ return -1; } } } } class Student{ private String name; private int age; private int score; public Student( String name, int age, int score){ this.name = name; this.age = age; this.score = score; } public String toString(){ return this.name + " " + this.age + " " + this.score; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * @return the score */ public int getScore() { return score; } /** * @param score the score to set */ public void setScore(int score) { this.score = score; } }