當前位置:編程學習大全網 - 編程語言 - java語言做成績排名表,如何實現同分同名次,最好有代碼,謝謝

java語言做成績排名表,如何實現同分同名次,最好有代碼,謝謝

思路: 排序肯定還是要排的, 按照Java成績來進行排練. 然後排名的時候,進行比較. 如果這壹名的成績和上壹名的相同, 那麽名次相同, 如果比上壹名分數低,那麽排名加壹.

可以使用傳統的,集合排序,輸出. 也可以使用java8新提供的Stream API進行操作

參考代碼如下

import?java.util.*;

import?java.util.Map.Entry;

import?java.util.stream.Collectors;

class?Stu?{//?學生類

private?String?name;

private?double?score;//?成績

public?Stu(String?name,?double?score)?{

this.name?=?name;

this.score?=?score;

}

public?double?getScore()?{

return?score;

}

public?void?setScore(double?score)?{

this.score?=?score;

}

public?String?getName()?{

return?name;

}

public?void?setName(String?name)?{

this.name?=?name;

}

}

//測試類

public?class?TestDemo?{

public?static?void?main(String[]?args)?{

List<Stu>?stus?=?Arrays.asList(new?Stu("Tom",?79.5),?new?Stu("Jack",?52),?new?Stu("Amdy",?79.5),

new?Stu("Lucy",?68),?new?Stu("Cherry",?79.5),?new?Stu("Jerry",?52),?new?Stu("Sweet",?91),

new?Stu("Solem",?65));

fun1(stus);

System.out.println("---------------分割線---------------------");

fun2(stus);

}

//?方法壹:傳統的方法

public?static?void?fun1(List<Stu>?stus)?{

//?按照成績排序

stus.sort(new?Comparator<Stu>()?{

@Override

public?int?compare(Stu?s1,?Stu?s2)?{

return?-Double.compare(s1.getScore(),?s2.getScore());

}

});

int?index?=?0;//?排名

double?lastScore?=?-1;//?最近壹次的分

for?(int?i?=?0;?i?<?stus.size();?i++)?{

Stu?s?=?stus.get(i);

if?(Double.compare(lastScore,?s.getScore())!=0)?{?//?如果成績和上壹名的成績不相同,那麽排名+1

lastScore?=?s.getScore();

index++;

}

System.out.println("名次:"?+?index?+?"\t分數"?+?s.getScore()?+?"\t名字"?+?s.getName());

}

}

//?方法2:?Java8開始支持的Lambada表達式配合?Stream?API?來進行分組排序

public?static?void?fun2(List<Stu>?stus)?{

List<Entry<Double,?List<Stu>>>?list?=?stus.stream().collect(Collectors.groupingBy(Stu::getScore)).entrySet()

.stream().sorted((s1,?s2)?->?-Double.compare(s1.getKey(),?s2.getKey())).collect(Collectors.toList());

int?index?=?1;

for?(Entry<Double,?List<Stu>>?entry?:?list)?{

System.out.print("名次:"?+?index?+?"\t分數:"?+?entry.getKey()?+?"\t名字");

entry.getValue().forEach((s)?->?System.out.print("?"?+?s.getName()));

System.out.println();

index++;

}

}

}

輸出結果

名次:1 分數91.0 名字Sweet

名次:2 分數79.5 名字Tom

名次:2 分數79.5 名字Amdy

名次:2 分數79.5 名字Cherry

名次:3 分數68.0 名字Lucy

名次:4 分數65.0 名字Solem

名次:5 分數52.0 名字Jack

名次:5 分數52.0 名字Jerry

名次:1 分數:91.0 名字?Sweet

名次:2 分數:79.5 名字?Tom?Amdy?Cherry

名次:3 分數:68.0 名字?Lucy

名次:4 分數:65.0 名字?Solem

名次:5 分數:52.0 名字?Jack?Jerry

---------------分割線---------------------

名次:1 分數:91.0 名字?Sweet

名次:2 分數:79.5 名字?Tom?Amdy?Cherry

名次:3 分數:68.0 名字?Lucy

名次:4 分數:65.0 名字?Solem

名次:5 分數:52.0 名字?Jack?Jerry

  • 上一篇:UI設計很簡單
  • 下一篇:課程設計心得體會範文3篇
  • copyright 2024編程學習大全網