У меня есть список пара, генерируемый из этого кодаБесприбыльные повторяющиеся пары в равных ведрах размера
int n = listTeam.size();
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (i != j)
listTeamPairs.add(new Team[] { listTeam.get(i), listTeam.get(j) });
}
}
}
Это будет правильно генерировать эти пары, если есть 6 команд.
[0 1 , 0 2 , 0 3 , 0 4 , 0 5 , 1 2 , 1 3 , 1 4 , 1 5 , 2 3 , 2 4 , 2 5 , 3 4 , 3 5 , 4 5 ]
Проблема, которую я имею, чтобы забрать эти пары в раундах (ведра) одинакового размера (три в данном случае).
Первый раунд станет
0-1, 2-3, 4-5
Проблема возникает во втором туре
0-2, 1-3 <- swap order of these matches.
This leaves only team 4-5 again. Which is not valid.
код, который генерирует раундов без недействительных записей, но не полное ведро
private boolean generateRound(Team[] teamInRound, List<Team[]> roundTeams) {
Team team1 = teamInRound[0];
Team team2 = teamInRound[1];
Optional<Team[]> t = roundTeams.stream().filter(p -> p[0].getName().contentEquals(team1.getName()) ||
p[1].getName().contentEquals(team2.getName()) || p[0].getName().contentEquals(team2.getName()) ||
p[1].getName().contentEquals(team1.getName())).findAny();
if (t.isPresent())
return false;
roundTeams.add(teamInRound);
tmpTeamPairs.remove(teamInRound);
return true;
}
private void generateRounds(List<Team[]> teams) {
for (int i = 0; i < listTeam.size()/2;i++) {
System.out.println("Reamining pairs");
tmpTeamPairs.stream().forEach(p -> System.out.println(p[0].getName() + " - " + p[1].getName()));
if (i == 0) {
teams.add(tmpTeamPairs.get(0));
tmpTeamPairs.remove(0);
continue;
}
for (Team[] pair : tmpTeamPairs) {
boolean b = generateRound(pair, teams);
if (b) {
break;
}
}
}
}
Глядя на предложенный ответ, он, похоже, не генерирует нужные ведра.
scheduled team 0 against team 4
scheduled team 2 against team 3 <-----
scheduled team 5 against team 1
Array order
0
2 <---
5
4
3 <---
1
Lag 5 - Lag3
Lag1 - Lag2 <-----
Lag4 - Lag 6
-----------------------------------------------
scheduled team 0 against team 5
scheduled team 1 against team 4
scheduled team 2 against team 3 <----
Array order
0
1
2 <---
5
4
3 <---
Lag 5 - Lag4
Lag 6 - Lag3
Lag1 - Lag2 <-----
Unrelated, но 'если (I = J!)' Не кажется, необходимо. –
Если я = J, команда сыграет сама. – user2130951
Уверен, но у вас есть тот, который покрыт 'for (int j = i + 1; ...' уже. –