繁体   English   中英

HashMap 到 ComboBox

[英]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]}


其次,如果你想用你的 teamPlayers Map中的球队组合来生成比赛,那么你需要采取不同的方法。 最好将所有内容分开:

  1. 初始化分组在List玩家
  2. 初始化可能的匹配组合
  3. 为某个匹配组合初始化您的 GUI 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM