[英]HashMap to ComboBox
我试图从“teamPlayers”哈希图中获取与“匹配”对象中的键“i”和“j”相对应的值,以放入组合框“homebox、homebox2、awaybox、awaybox2”中。 当我尝试向组合框添加四个值时,它只会添加最后两个值。 想知道是否有人知道我可以尝试阻止这种情况发生并让它添加比现在添加的两个值更多的值。 谢谢你们。
public void generateMatches (String homeTeam, String awayTeam){
boolean bool = false;
int x = 0;
arrayLength = teamPlayers.size();
for (String i : teamPlayers.keySet()){
for (String j : teamPlayers.keySet()){
if (teamPlayers.get(i).equals(teamPlayers.get(j)) && !bool){
bool = true;
}else if (bool){
Match matches = new Match(i,j);
homeTeam = matches.getHomeTeam();
awayTeam = matches.getAwayTeam();
scoreHomeTeam.getItems().add(matches.getHomeTeam());
scoreAwayTeam.getItems().add(matches.getAwayTeam());
while(x<teamPlayers.size()){
for (Entry<String,String> e : teamPlayers.entrySet()){
homeBox.getItems().add(e.getValue());
homeBox2.getItems().add(e.getValue());
awayBox.getItems().add(e.getValue());
awayBox2.getItems().add(e.getValue());
}
x++;
}
System.out.println("\nMatch created between "+ homeTeam + " & "+ awayTeam);
}
}
bool = false;
}
}
我认为您正在尝试根据HashMap
的团队生成匹配项。
首先,你没有解释你的 teamPlayers HashMap
的结构,但我相信你的问题在于你如何使用HashMap
来存储你的球员。
您将它们存储为 {TeamName = PlayerName} 组合,但与任何Map
,键必须是 unique 。
因此,您可能在初始化Map
时删除 Players :
Map<String, String> teamPlayers = new HashMap<String, String>();
teamPlayers.put("Team 1", "Player 1");
teamPlayers.put("Team 1", "Player 2"); // --> overwrites Player 2
teamPlayers.put("Team 2", "Player 3");
teamPlayers.put("Team 2", "Player 4"); // --> overwrites Player 3
System.out.println(teamPlayers);
打印出来
{团队 1=玩家 2,团队 2=玩家 4}
最好将它们添加为List
,这样每个玩家都存储在同一个Entry
Map<String, List<String>> teamPlayers = new HashMap<String, List<String>>();
teamPlayers.put("Team 1", Arrays.asList(new String[] { "Player 1", "Player 2" }));
teamPlayers.put("Team 2", Arrays.asList(new String[] { "Player 3", "Player 4" }));
System.out.println(teamPlayers);
打印出来
{团队 1=[玩家 1,玩家 2],团队 2=[玩家 3,玩家 4]}
Map
中的球队组合来生成比赛,那么你需要采取不同的方法。
最好将所有内容分开:
List
玩家ComboBox
在此过程中帮助您的可运行示例类如下所示。
public class MatchFixer { private Map<String, List<String>> teamPlayers; public MatchFixer() { teamPlayers = new HashMap<String, List<String>>(); teamPlayers.put("Team 1", Arrays.asList(new String[] { "Player 1_1", "Player 1_2" })); teamPlayers.put("Team 2", Arrays.asList(new String[] { "Player 2_1", "Player 2_2" })); teamPlayers.put("Team 3", Arrays.asList(new String[] { "Player 3_1", "Player 3_2" })); } public List<Match> generateMatches(){ List<Match> matches = new ArrayList<Match>(); for (String homeTeam : teamPlayers.keySet()){ for (String awayTeam : teamPlayers.keySet()){ if (!homeTeam.equals(awayTeam)){ Match match = new Match(homeTeam, awayTeam); matches.add(match); System.out.println("\\tMatch created between "+ homeTeam + " & "+ awayTeam); } } } return matches; } public void initMatch(Match match){ String homeTeam = match.getHomeTeam(); String awayTeam = match.getAwayTeam(); List<String> homePlayers = teamPlayers.get(homeTeam); List<String> awayPlayers = teamPlayers.get(awayTeam); scoreHomeTeam.getItems().add(homeTeam); scoreAwayTeam.getItems().add(awayTeam); homeBox.getItems().addAll(homePlayers); homeBox2.getItems().addAll(homePlayers); awayBox.getItems().addAll(awayPlayers); awayBox2.getItems().addAll(awayPlayers); System.out.println("\\tMatch initialized between "+ homeTeam + " -> "+ homePlayers +" & "+ awayTeam +" -> "+ awayPlayers); } public static void main(String[] args) { MatchFixer fixer = new MatchFixer(); // Initialize matches with all the combinations of teams System.out.println("Initialize the match combinations:"); List<Match> matches = fixer.generateMatches(); // Let's initialize the first of our generated matches System.out.println("\\nInitialize match 1:"); fixer.initMatch(matches.get(0)); } }
打印出来
初始化匹配组合:
第 3 队和第 1 队之间创建的比赛
第 3 队和第 2 队之间创建的比赛
团队 1 和团队 3 之间创建的比赛
团队 1 和团队 2 之间创建的比赛
团队 2 和团队 3 之间创建的比赛
团队 2 和团队 1 之间创建的比赛初始化匹配 1:
比赛在 Team 3 -> [Player 3_1, Player 3_2] & Team 1 -> [Player 1_1, Player 1_2] 之间初始化
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.