作业1209"/>
每日作业1209
成绩排名
输入多个学生的姓名和成绩, 打印其名称 成绩和排名
输入:
第一行: 整数N 表示有N个学生
第二行开始, 每行一个字符串和一个整数Mi, 表示学生姓名和成绩
输出:
(1<=N<=100, 0<=Mi<=100)
按成绩从高到低的顺序打印每个学生的姓名,成绩, 排名
(需要注意的是, 如果成绩相同, 则排名并列)
样例输入
6
张三 80
李四 90
王五 85
赵六 85
李雷 90
韩梅梅 100
样例输出:
韩梅梅 100 1
李雷 90 2
李四 90 2
王五 85 3
赵六 85 3
张三 80 4
方式一
//数组写法
public class Task12091 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("输入学生的数量");int num = input.nextInt();//创建一个二维数组String[][] student = new String[num][2];//使用for循环添加数据for(int i = 0; i < num; i++) {System.out.println("输入学生的姓名");student[i][0] = input.next();System.out.println("输入学生的成绩");student[i][1] = input.next();}Arrays.sort(student, new Comparator<Object>() {@Overridepublic int compare(Object o1, Object o2) {if(o1 instanceof String[] && o2 instanceof String[]) {String[] s1 = (String[]) o1;String[] s2 = (String[]) o2;return -s1[1]pareTo(s2[1]);}throw new RuntimeException("输入的数据类型不一致");}});//此时数组内容已经按照成绩顺序排好序,下面是排名的问题,同分同名次//此时数组里第一个人成绩以及是最高的,我们需要比较的是后面的人的成绩和他是否想等int randk = 0; //没有第0名String lastScore = "-1"; //上一个人的成绩for (int i = 0; i < student.length; i++) {if(!(student[i][1].equals(lastScore))){lastScore = student[i][1];randk++;} System.out.println("姓名:" + student[i][0] + " 成绩" + student[i][1] + " 排名:" + randk);}}
}
运行结果
方式二
public class Task1209 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入学生的数量");int n = input.nextInt(); //存储学生数量int rank = 0; //存储排名int lastScore = -1; //存储上一个学生的成绩List<Student> list = new ArrayList<Student>();for(int i = 0; i < n; i++) {Student s = new Student();System.out.println("请输入学生的姓名");s.setName(input.next());System.out.println("请输入学生的成绩");s.setScore(input.nextInt());list.add(s);}Collections.sort(list, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o2.getScore() - o1.getScore();}});;for (int i = 0; i < list.size(); i++) {if((list.get(i).getScore() - lastScore) != 0) {lastScore = list.get(i).getScore();rank++;}System.out.println("姓名:" + list.get(i).getName() + "成绩:" + list.get(i).getScore() + "名次" + rank);}}
}
public class Student {private String name;private int score;public Student() {}public String getName() {return name;}public int getScore() {return score;}public void setName(String name) {this.name = name;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return name + " " + score + " ";}}
方式三
public class Task1209 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入学生的数量");int n = input.nextInt(); //存储学生数量int rank = 0; //存储排名int lastScore = -1; //存储上一个学生的成绩List<Student> list = new ArrayList<Student>();for(int i = 0; i < n; i++) {Student s = new Student();System.out.println("请输入学生的姓名");s.setName(input.next());System.out.println("请输入学生的成绩");s.setScore(input.nextInt());list.add(s);}Collections.sort(list);for (int i = 0; i < list.size(); i++) {if((list.get(i).getScore() - lastScore) != 0) {lastScore = list.get(i).getScore();rank++;}System.out.println("姓名:" + list.get(i).getName() + "成绩:" + list.get(i).getScore() + "名次" + rank);}}
}
public class Student implements Comparable<Student>{private String name;private int score;public Student() {}public String getName() {return name;}public int getScore() {return score;}public void setName(String name) {this.name = name;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return name + " " + score + " ";}@Overridepublic int compareTo(Student o) {// TODO 自动生成的方法存根return o.getScore() - this.getScore();}}
更多推荐
每日作业1209
发布评论