2010-06-08 4 views
2

У меня есть ситуация. Мне нужно создать систему спортивного клуба в JAVA. Там должен быть класс для отслеживания имени клуба, имени президента и браков клуба. Для каждой спортивной ветви также должен быть класс для отслеживания списка игроков. Также каждый игрок должен иметь имя, номер, должность и зарплату. Итак, я придумал это. Три отдельных класса:Могу ли я использовать свои объекты, не заполняя их полностью?

public class Team 
{ 
String clubName; 
String preName; 
Branch []branches; 
} 

public class Branch 
{ 
Player[] players; 

} 

public class Player 
{ 
String name; 
String pos; 
int salary; 
int number; 
} 

Проблемы создают Branch [] в другом классе и то же самое для Player []. Есть ли более простая вещь для этого? Например, я хочу добавить информацию только для названия клуба, имени президента и филиалов клуба, в этой ситуации мне не придется вводить игроков, имена, зарплаты и т. Д., Так как они вложены друг в друга. Надеюсь, я могу быть ясным. За дополнительными вопросами вы можете задать.

+3

Если приведенный выше код непосредственно вставлен - отступы это в вашей среде IDE! – Bozho

+1

CTRL + SHIFT + F - eclipse – ant

+0

У меня нет моего компилятора передо мной прямо сейчас. Я просто написал это здесь. – LuckySlevin

ответ

3

Вот более полный, формальный пример вашего сценария с использованием обычных Accessors/Mutators (getters/seters), constructors и Lists. Ниже приведен метод main(), как использовать ваши классы.

public class SportsClub 
{ 
    public static void main(String[] args) 
    { 
     //Create a team without any branches 
     Team myTeam = new Team("Southpaws", "South"); 

     //Create a new Branch without any players 
     Branch myBranch = new Branch(); 

     //Add myBranch to myTeam 
     myTeam.getBranches().add(myBranch); 

     //Create a new player 
     Player myPlayer = new Player("Bob", "Center", 120, 3); 

     //Add myPlayer to myBranch (and therefore myTeam) 
     myBranch.getPlayers().add(player); 
    } 
} 


public class Team 
{ 
    private String clubName; 
    private String preName; 
    private List<Branch> branches; 

    public Team(String clubName, String preName) 
    { 
     this.clubName = clubName; 
     this.preName = preName; 
     branches = new ArrayList<Branch>(); 
    } 

    public String getClubName() { return clubName; } 
    public String getPreName() { return preName; } 
    public List<Branch> getBranches() { return branches; } 

    public void setClubName(String clubName) { this.clubName = clubName; } 
    public void setPreName(String preName) { this.preName = preName; } 
    public void setBranches(List<Branch> branches) { this.branches = branches; } 
} 

public class Branch 
{ 
    private List<Player> players = new ArrayList<Player>(); 

    public Branch() {} 

    public List<Player> getPlayers() { return players; } 
    public void setPlayers(List<Player> players) { this.players = players; } 
} 

public class Player 
{ 
    private String name; 
    private String pos; 
    private Integer salary; 
    private Integer number; 

    public Player(String name, String pos, Integer salary, Integer number) 
    { 
     this.name = name; 
     this.pos = pos; 
     this.salary = salary; 
     this.number = number; 
    } 

    public String getName() { return name; } 
    public String getPos() { return pos; } 
    public Integer getSalary() { return salary; } 
    public Integer getNumber() { return number; } 

    public void setName(String name) { this.name = name; } 
    public void setPos(String pos) { this.pos = pos; } 
    public void setSalary(Integer salary) { this.salary = salary; } 
    public void setNumber(Integer number) { this.number = number; } 
} 

Чтобы ответить на ваш вопрос, да, вы можете создавать эти объекты без заполнения List с с игроками. Это иллюстрирует SportsClub.main().

2

Вы можете создать пустой массив Branch[] (или еще лучше - список) при инициализации и добавить к нему позже, так что вам не нужно вводить всю информацию при создании - то же самое для Player[].

Что-то вроде:

public class Team 
{ 
    String clubName; 
    String preName; 
    private List<Branch> branches; 

    public Team (String club, String pre) { 
     clubName = club; 
     preName = pre; 
     branches = new LinkedList<Branch>(); 
    } 
    public void addBranch (Branch branch) {..} 
} 

public class Branch 
{ 
    private List<Player> players; 
    public Branch() { 
     players = new LinkedList<Player>(); 
    } 
    public void addPlayer (Player player) {..} 
} 

public class Player 
{ 
    String name; 
    String pos; 
    int salary; 
    int number; 
} 
2

Я хотел бы использовать список, а не массив, так как они (легко) динамически изменяемый, но в противном случае, вы на правильном пути.

Подумайте об инкапсуляции и видимости. Сделайте все эти поля частными и предоставите доступ к ним.

0

У вас нет , чтобы ввести что-либо в массив players, а также branch[]. Если вы сделаете поля доступными, иметь свойства, вы сможете разместить их, как вам нравится.

Структура класса выглядит хорошо для меня, но List будет лучше, так что вам не придется беспокоиться о изменении размеров массивов по дороге.

2

Я думаю, что это хорошо. Вероятно, у вас, должно быть, есть методы в классах для управления вашей информацией - не пытайтесь делать что-либо серьезное из «Вне» этих классов.

Конкретнее: все ваши члены должны быть закрытыми и использоваться только из классов, а также избегать сеттеров и геттеров, вместо этого попросите класс сделать что-то для вас.

Например, если вы хотите знать, сколько игроков было в ветке, вы можете вызвать branch.countPlayers, а не обращаться к массиву Player, чтобы считать игроков снаружи.

Если вы хотите узнать, сколько игроков было в команде, вы должны вызвать команду team.countPlayers, которая будет называть branch.countPlayers для каждой ветви, суммировать их и вернуть значение.

Если вы хотите увидеть, в какой ветке находится игрок, вы должны называть Team.findPlayer (playerName). Команда будет называть branch.hasPlayer (playerName) в каждой ветке, пока не вернет true, тогда Команда вернет объект Branch, который вернул true.

т.д.

Обратите внимание, что это решает ваш «населена или нет» вопрос.Если вы просто используете такие методы, как «hasBranch()», «addBranch()», «removeBranch()», то не имеет значения, как и когда вы заполняете массив ветвей, так как вы контролируете все это в классе Team, вы можете изменить его реализации в любое время и не изменять одну строку вне этого класса.

0

Ничего плохого в ваших классах. Я лично хотел бы использовать строго типизированных List для хранения филиалов и игроков:

public class Team 
{ 
    String clubName; 
    String preName; 
    List<Branch> branches; 
} 

public class Branch 
{ 
    List<Player> players; 

} 

Не уверен в требовании, но вы, вероятно, хотите, чтобы иметь какой-то идентификатор или имя для каждого Branch, верно?

В этих классах нет ничего, что заставило бы вас создавать новых игроков, чтобы создать экземпляр ветви. Список Players может оставаться пустым или пустым, пока вам не понадобятся.

Смежные вопросы