给出一个球员列表,我试图确定哪个球员得分最高(获胜者),哪个球员并列(如果有),然后推断剩下的球员是一场比赛的输家。
我尝试过实施一个球员比较器,按照得分从高到低的顺序对每个球员进行排序。当然,这将有助于找到赢家和输家。但是我不知道该从哪里去。
我的第一个想法是遍历玩家列表并执行某种冒泡排序算法,但老实说我不知道。我也在考虑一些递归函数。
这是到目前为止endGame()函数中的功能:
private void endGame(){
this.gameRunning = false;
List<WAMPlayer> scoreTable = new ArrayList<>(this.players.keySet());
WAMPlayer winner;
List<WAMPlayer> tiedPlayers = new ArrayList<>();
List<WAMPlayer> losers = new ArrayList<>();
scoreTable.sort(new PlayerScoreComparator());
for (int i = 0 ; i < scoreTable.size(); i++){
if (i == scoreTable.size() - 1){
losers.add(scoreTable.get(i));
break;
}
if (scoreTable.get(i).getScore() == scoreTable.get(i + 1).getScore()){
for (int j = i + 1; j < scoreTable.size(); j++){
}
}
/*
Need to set the winner and tied players somewhere here...
*/
}
}
这是给定玩家列表的输出示例的两个示例:Player1,Player2,Player3和Player4。玩家按得分排序。
示例一: 玩家1:5,玩家2:4,玩家3:4,玩家4:3
获胜者:Player1 绑定:Player2,Player3 失败者:Player4
示例二: 玩家1:5,玩家2:5,玩家3:5,玩家4:2 获胜者:null 绑定:Player1,Player2,Player3 失败者:Player4
(抱歉播放器4)
答案 0 :(得分:2)
我们可以使用Collectors#groupingBy
和流将每个玩家分为得分组。
import sys
from pympler.asizeof import asizeof
tuple1 = ('1234','2019-04-27','23.4658')
tuple2 = ('1563','2019-04-27','19.2468')
klist1 = [tuple1]
klist2 = [tuple1,tuple2]
# The results for the following did not answer my question
print ("sys.getsizeof(klist1): ",sys.getsizeof(klist1))
print ("sys.getsizeof(klist2): ",sys.getsizeof(klist2))
# The results for the following give a quite reasonable answer
print ("asizeof(klist1): ",asizeof(klist1))
print ("asizeof(klist2): ",asizeof(klist2))
每个得分值将具有其自己的键和具有该得分的玩家的列表值。如果是平局,则该键的列表值将包含超过LinkedHashMap<Integer, List<Player>> mappedScores = set.stream().collect(
Collectors.groupingBy(Player::getScore,
LinkedHashMap::new, //preserve order
Collectors.toList()));
个玩家。
然后,我们可以使用简单的for循环枚举地图,并确定哪些球员处于哪个位置以及哪些球员被并列。假设得分越高,排名就越低。
1
答案 1 :(得分:0)
我可能会考虑按得分对玩家进行分组,然后按得分对结果流进行排序。首先是获胜者或并列(基于size()
)。最后将是失败者(或再次基于size()
。
看看{@ 3}}的Collectors.grouping
和Stream.sorted()https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function-