【问题标题】:HashMap to ComboBoxHashMap 到组合框
【发布时间】:2019-02-26 19:04:31
【问题描述】:

我试图从“teamPlayers”哈希图中获取与“match”对象中的键“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;
        }

    }

【问题讨论】:

  • 我们需要更多信息来帮助您。前任。您的 teamPlayers 地图中有什么?
  • 逐步思考。 1. 获得主队球员。 2. 获得客队球员。 3. 将主队球员添加到主框。 4. 将客队球员添加到客场。

标签: java javafx combobox hashmap


【解决方案1】:

我认为您正在尝试根据HashMap 中的团队生成匹配项。

首先,你没有解释你的teamPlayersHashMap的结构,但我相信你的问题在于你如何使用HashMap来存储你的球员。
您将它们存储为 {TeamName = PlayerName} 组合,但与任何 Map 一样,键必须是唯一的
因此,在初始化 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 队之间创建比赛
在 Team 2 和 Team 1 之间创建比赛

初始化匹配 1:

Team 3 -> [Player 3_1, Player 3_2] & Team 1 -> [Player 1_1, Player 1_2] 之间的比赛初始化

【讨论】:

  • 干得好@George Derpi。我假设Key 值是Players 的列表。
  • 谢谢你的朋友,我真的很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多