HashMap в ComboBox - PullRequest
       7

HashMap в ComboBox

0 голосов
/ 26 февраля 2019

я пытаюсь получить значения из хеш-карты "teamPlayers", которые соответствуют ключам "i" и "j" в объекте "match", для помещения в homebox comboBoxes, 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;
        }

    }

1 Ответ

0 голосов
/ 27 февраля 2019

Я думаю, что вы пытаетесь генерировать совпадения на основе команд в вашем HashMap.

Во-первых, вы не объяснили структуру вашей командыPlayers HashMap, но я считаю, что ваша проблема заключается в том, как вы используете HashMap для хранения своих игроков.
Вы сохраняете их как {TeamName= PlayerName}, но, как и любая Map, клавиша должна быть уникальной .
. Таким образом, вы, вероятно, выбрасываете игроков при инициализации своих Map:

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

Printsout

{Команда 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. Инициализировать ваш графический интерфейс 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));
    }
}

Печатает

InitializeКомбинации матчей:

Матч, созданный между командой 3 и командой 1
Матч, созданный между командой 3 и командой 2
Матч, созданный между командой 1 и командой 3
Матч, созданный между командой1 и команда 2
Матч создан между командой 2 и командой 3
Матч создан между командой 2 и командой 1

Инициализация матча 1:

Матч инициализированмежду Командой 3 -> [Игрок 3_1, Игрок 3_2] и Командой 1 -> [Игрок 1_1, Игрок 1_2]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...