成绩表排名次
第一種方法
public static int[] Ranking(int[] score) {//臨時數組int[] temp = new int[score.length];List lis = new ArrayList();//把不重復的數據放進集合里for (int x : score) {if (!lis.contains(x)) {lis.add(x);}}//從小到大排序Collections.sort(lis);//反向排序目的是把最大的放在第一位Collections.reverse(lis);//真正的名次就是下角標+1for (int i = 0; i < score.length; i++) {temp[i] = lis.indexOf(score[i]) + 1;}return temp; }如果數組的內容是{1,2,2,2,3}? 那么名次是:3,2,2,2,1
有時候會把并列的名次也占位置。如果想要得到的結果是:5,2,2,2,1
那么就是下面的方法了
https://blog.csdn.net/u014298282/article/details/103680770
在這位博主的基礎上稍稍改進了點
public class Rank {public static void main(String[] args) {test1();}private static void test1() {List<Person> list=getList();list.sort((x,y)->x.getAge()-y.getAge());//一般來說,分數是按照大小排列的所以增加了下面一行代碼,如果需要從小到大排序,下面一行可以去掉Collections.reverse(list);int a=0,b=Integer.MIN_VALUE,c=0;for (Person person : list) {if (person.getAge().equals(b)){c++;}else {b=person.getAge();a=a+c+1;c=0;}person.setRank(a);}//上面的list是根據年齡由大到小或者有小到大排序的,打亂了原來的順序。//如果不需要打亂人名,那么就再次循環賦值一下List<Person> list1 = getList();for (Person p1: list1){for (Person p: list){if (p1.name.equals(p.name)){p1.setRank(p.getRank());}}}for (Person person : list1){System.out.println(person);}}private static List<Person> getList() {ArrayList<Person> list = new ArrayList<>();list.add(new Person("張三", 20));list.add(new Person("李四", 50));list.add(new Person("王五", 25));list.add(new Person("趙六", 25));list.add(new Person("marry", 35));list.add(new Person("jack", 35));list.add(new Person("ashe", 35));return list;}@Datastatic class Person {private String name;private Integer age;private Integer rank;public Person(String name, Integer age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", rank=" + rank +'}';}} }輸出的結果如下:
Person{name='張三', age=20, rank=7}
Person{name='李四', age=50, rank=1}
Person{name='王五', age=25, rank=5}
Person{name='趙六', age=25, rank=5}
Person{name='marry', age=35, rank=2}
Person{name='jack', age=35, rank=2}
Person{name='ashe', age=35, rank=2}
總結
- 上一篇: 乐高机械组雅马哈MT-10 SP即将交付
- 下一篇: 开源子路