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;
}
}
答案 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]}
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));
}
}
打印出
初始化匹配组合:
第3团队和第1团队之间创建的比赛
第3组和第2组之间创建的比赛
团队1和团队3之间创建的比赛
团队1和团队2之间创建的比赛
第2队与第3队之间创建的比赛
在小组2和小组1之间创建的比赛初始化比赛1:
团队3-> [玩家3_1,玩家3_2]和团队1-> [玩家1_1,玩家1_2]之间的比赛初始化