[英]How to use a Comparator recursively?
我必須按照誰贏得最多游戲的順序對陣列“名稱”(下圖)中的隊伍進行排名。 如果兩支球隊贏得相同數量的比賽,那么我必須比較擊敗他們的球隊的勝利。 我到目前為止的代碼如下。
完整的問題陳述在這里給出: http : //www.cs.duke.edu/csed/newapt/tournamentrank.html
所以我想遞歸地使用比較器。 比較器如何才能訪問原始數據? 我嘗試創建一個Team類,該類可以為擊敗它的團隊獲取同一個類的變量,但這顯然不起作用。 困在這里,請幫忙!
public class TournamentRanker implements Comparator<String>{
public class Team {
String name;
Integer wins;
Team beatEm;
}
//HOW TO make maps visible to comparator?
public String[] rankTeams(String[] names, String[] lostTo) {
//map all teams to number of wins & to team that beat them
ArrayList<String> teams = new ArrayList<String>();
HashMap<String, Integer> Teamwins = new HashMap<String, Integer>();
HashMap<String, String> Whobeat = new HashMap<String, String>();
for(int x=0; x<names.length; x++)
{
if(!teams.contains(names[x]))
teams.add(names[x]);
if(!Teamwins.containsKey(names[x]))
Teamwins.put(names[x], 0);
Whobeat.put(names[x], lostTo[x]);
if(!Teamwins.containsKey(lostTo[x]) && !lostTo[x].equals(""))
Teamwins.put(lostTo[x], 0);
if(!lostTo[x].equals(""))
Teamwins.put(lostTo[x], (Teamwins.get(lostTo[x])+1));
}
for(String s: names)
{
Integer wins = Teamwins.get(s);
Team beatEm = new Team(Whobeat.get(s), Teamwins.get(Whobeat.get(s)), ????)
}
//SORT list & turn into ARRAY
Comparator<String> comp = new TournamentRanker();
Collections.sort(teams, comp);
String [] sortedTeams = new String[teams.size()];
return teams.toArray(sortedTeams);
}
//NEED to use compareTo***?? OTHER strategy????
//USE COMPARTOR - how to access all the data?
public int compare(String team1, String team2){
}
}
為了使地圖可見,我建議將Comparator
作為TournamentRanker
的內部類,並使地圖實例成為TournamentRanker
類的成員,如下所示:
public class TournamentRanker {
public class Team {
String name;
Integer wins;
Team beatEm;
}
// Map all teams to number of wins & to team that beat them
ArrayList<String> teams = new ArrayList<String>();
HashMap<String, Integer> Teamwins = new HashMap<String, Integer>();
HashMap<String, String> Whobeat = new HashMap<String, String>();
public String[] rankTeams(String[] names, String[] lostTo) {
TeamComparator teamComparator = new TeamComparator();
// Use teamComparator to sort teams.
...
}
private TeamComparator implements Comparator<String> {
public int compare(String team1, String team2){
// This function can now access the maps.
// Perform the comparison here.
...
}
}
}
如果你的目標是編寫一個面向對象的程序,我會按如下方式構造它:
Game
類,包含對參與Game
的兩個團隊的引用,以及每個團隊的分數。 Team
類,其中包含由對方團隊ID索引的游戲Map
( Game
對象)。 如果兩個團隊不止一次見面,那么你需要一個“多圖”,每個鍵允許多個值對象。 Tournament
對象,包含Team
實例(可能是由團隊名稱索引的Map
)和Game
對象(另一個Map
由您選擇的某個唯一鍵索引)。 在你的比較器中,你可以比較兩支球隊的輸贏記錄,如果有關系,請查看每支球隊的個人比賽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.