Я работаю над проектом по созданию турнира с использованием алгоритма кругового расписания. Вот класс, в котором я реализовал алгоритм:
public class Matchh {
public Team teamHome;
public Team teamAway;
public int teamHomeGoals;
public int teamAwayGoals;
public String matchDay;
public int noOfTeams;
public String[][] rounds;
public String[][] round;
Team teamList = new Team();
// no-arg constructor
Matchh() {
}
Matchh(String matchDay, Team teamHome, Team teamAway, int teamHomeGoals, int teamAwayGoals) {
this.matchDay = matchDay;
this.teamHome = teamHome;
this.teamAway = teamAway;
this.teamHomeGoals = teamHomeGoals;
this.teamAwayGoals = teamAwayGoals;
}
// round robin schedule method
public String[][] schedule() {
this.rounds = new String[(teamList.getSize() - 1) * 2][(teamList.getSize() / 2)];
for (int round = 0; round < (teamList.getSize() - 1) * 2; round++) {
for (int match = 0; match < (teamList.getSize() / 2); match++) {
this.teamHome = teamList.getIndex((round + match) % (teamList.getSize() - 1));
this.teamAway = teamList.getIndex((teamList.getSize() - 1 - match + round) % (teamList.getSize() - 1));
// Last team stays in the same place while the others rotate around it.
if (match == 0) {
teamAway = teamList.getIndex(teamList.getSize() - 1);
}
// from rounds half interchange the position of teams in rounds, to get both home and away matches
String mixedRounds;
if (round < (teamList.getSize() - 1)) {
mixedRounds = (teamHome + " vs " + teamAway + " " + teamHome.getGoal() + " - " + teamAway.getGoal());
} else {
mixedRounds = (teamAway + " vs " + teamHome + " " + teamAway.getGoal() + " - " + teamHome.getGoal());
}
rounds[round][match] = mixedRounds;
}
}
return rounds;
}
}
Метод schedule()
отлично работает для отображения расписания турниров для моего Team teamlist
, который представляет собой Arraylist
, содержащий 12 строк (12 названий команд), ниже приведен класс Team
для лучшего понимания. Но, учитывая способ определения вышеуказанного класса, у меня нет возможности вызывать различные свойства в другом классе — например, если мне нужно общее количество голов для конкретной команды, я хотел бы вызвать такой метод, как getTeamHomeGoals()
.
Что я пытался сделать, так это разбить метод schedule()
на части: определить методы setTeamHome()
и setTeamAway()
, сгенерировать случайные цели для каждого, создать метод getMatchDay()
и построить каждый раунд как объект Matchh
, содержащий teamHome
, teamAway
, teamHomeGoals
, teamAwayGoals
, matchDay
.
пока у меня есть следующие методы (которые не возвращают то, что я намеревался):
//get match day, matches ar held each week Wednesday and Sunday - we start with a Wednesday
public String getMatchDay() {
for (int round = 0; round < (teamList.getSize()-1)*2; round++) {
if (round%2 == 0){
this.matchDay = ("Wednesday" + (round + 2)/2);
}
else {
this.matchDay = ("Sunday" + (round+1)/2);
}
}
return matchDay;
}
//teamHome
public Team getTeamHome(){
for (int round = 0; round < (teamList.getSize()-1)*2; round++) {
for (int match = 0; match < (teamList.getSize() / 2); match++) {
this.teamHome = teamList.getIndex((round + match) % (teamList.getSize() - 1));
}
}
return teamHome;
}
Пожалуйста, дайте мне несколько советов о том, как я должен структурировать свой класс Matchh
, чтобы получить то, что я хочу, то есть связать вместе различные свойства совпадения и, возможно, как сломать метод schedule()
.
Вот еще Team
класс, о котором я упоминал выше
//team class
import java.util.ArrayList;
import java.util.Random;
public class Team {
// the name of the team object
private String name;
public ArrayList<Team> teamList;
//no-arg constructor, creates the array list of default teams
Team(){
this.teamList = new ArrayList<Team>();
teamList.add(new Team("Brondby IF"));
teamList.add(new Team("AaB"));
teamList.add(new Team("Viborg FF"));
teamList.add(new Team("Esbjerg"));
teamList.add(new Team("FC Copenhagen"));
teamList.add(new Team("Randers FC"));
teamList.add(new Team("FC Midtjylland"));
teamList.add(new Team("FC Nordsjaelland"));
teamList.add(new Team("Odense BK"));
teamList.add(new Team("AGF Aarhus"));
teamList.add(new Team("FC Vestsjaelland"));
teamList.add(new Team("Sonderjyske"));
}
//constructor using name
Team(String name){
this.name =name;
}
//get name of team
public String getName(){
return name;
}
//get the size of the arrayList
public int getSize(){
return teamList.size();
}
//get an element at a specific index i
public Team getIndex(int i){
return teamList.get(i);
}
Спасибо!
Team
должен содержать данные только одной команды. Прямо сейчас, каждый раз, когда вы вызываете конструкторTeam()
, он вызывает себя еще несколько раз, вызывая проблему бесконечной рекурсии! Попробуйте, чтобы классTeam
содержал данные только для одной команды, а затем хранил список экземпляровTeam
в другом месте. - person kevinsa5   schedule 07.01.2014