HashMap到ComboBox

时间:2019-02-26 19:04:32

标签: java javafx combobox hashmap

im试图从“ teamPlayers”哈希图中获取与放置在comboBoxes“ homebox,homebox2,awaybox,awaybox2”中的“ match”对象中的键“ i”和“ j”相对应的值。当我尝试向组合框添加四个值时,它只会添加最后两个。想知道是否有人有什么想法,我可以尝试阻止这种情况的发生,并使它添加的价值比现在增加的价值更多。谢谢你们。

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;
        }

    }

1 个答案:

答案 0 :(得分:1)

我认为您正在尝试根据HashMap中的球队进行比赛。

首先,您没有说明teamPlayers HashMap的结构,但我认为您的问题在于如何使用HashMap存储玩家。
您可以将它们存储为{TeamName = PlayerName}组合,但是像任何Map一样,密钥必须唯一
因此,初始化Map时,您可能会丢弃Player:

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:

     
    

团队3-> [玩家3_1,玩家3_2]和团队1-> [玩家1_1,玩家1_2]之间的比赛初始化