Я думаю, что вы пытаетесь генерировать совпадения на основе команд в вашем 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
, то вам нужно использовать другой подход.Было бы лучше разделить все на части:
- Инициализировать ваших игроков, сгруппированных в
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));
}
}
Печатает
InitializeКомбинации матчей:
Матч, созданный между командой 3 и командой 1
Матч, созданный между командой 3 и командой 2
Матч, созданный между командой 1 и командой 3
Матч, созданный между командой1 и команда 2
Матч создан между командой 2 и командой 3
Матч создан между командой 2 и командой 1
Инициализация матча 1:
Матч инициализированмежду Командой 3 -> [Игрок 3_1, Игрок 3_2] и Командой 1 -> [Игрок 1_1, Игрок 1_2]