Как инициализировать поля в конструкторе в нескольких классах Java

Мне дали 4 класса Java

Teams.java
Team.java
Players.java
Player.java

Мне нужно иметь возможность создавать некоторых игроков и команды. И добавить игроков в команду. Я просто запутался, как мне добавить игроков в команды? Какой класс я должен использовать и как их добавить?

public class Teams {
    public ArrayList<Team> teams;
    public Teams(){         //take no parameters

    }

public class Team {
    private String name;
    private Players players;
    public Team(String name){
//takes one parameter, the name, corresponding to the fields identically named. Other fields require no parameters but the constructor methods

    }

public class Players {
    private ArrayList<Player> Players;
    public Players(){   //takes no parameters

    }

public class Player {
    private String name;
    private Double credit;
    private String level;
    private Integer age;
    private String team;
    private Integer No;
    
    public Player(String name, Double credit, Integer age, Integer No){
        this.name = name;
        this.credit = credit;
        this.age = age;
        this.No = No;
        this.level = CalculateLvl(credit);
    }

я попытался добавить некоторых игроков в список игроков в классе Players, как это

public Players(){   //no parameters
        Players.add(new Player("Kevin Hart", 1300.0, 20, 7));
    }`

и некоторые команды в список Teams в классе Teams

public Teams(){     //take no parameters
        teams.add(new Team("Knicks"));
    }

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

вот фрагмент диаграммы классов

В одной команде (грамматика единственного числа) есть группа (множественное число) игроков. Команда не играет сама по себе, поэтому Команды (множественное число) представляет собой группу из нескольких наборов Команды. Так что на самом деле это должно быть «общедоступный класс Teams extends ArrayList<Team> и «общедоступный класс Players extends ArrayList<Player>». Я не использую его часто «общедоступный класс Teams<Team> extends ArrayList», забыл, что, компилятор покажет ошибку ., Teams<Team> или Players<Player> — это то, как тип переменной будет записан в классе для этих классов.Разумно уверен, что последнее, потому что разумно объявить «Players<Player> pls = new Players<>();»

Samuel Marchant 15.04.2023 02:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Элементарная попытка без компилятора проверить. Большинство авторитетных учебных пособий показывают, что было бы... extends ArrayList-Team-

 // Seems ok from some sources -  public class Teams<Team> extends ArrayList

 public class Teams extends ArrayList<Team>{
    
    Team temp;
    Players<Player> pls; // extends ArrayList
    
    public Teams(){
    
    pls = new Players<>();
    pls.add(new Player("Ruhollah Khomeini",0.0000,17,88));
    pls.add(new Player("Margaret Thatcher",0.0000,101,16));
    pls.add(new Player("Joe Biden",-0.0000,3,45));
    pls.add(new Player("Idi Amin",0.0000,25,44));
    
    temp = new Team(pls);
   
    
    add(temp);
    
    }//end constuctor
    
    }//end class

допустил небольшую ошибку на мгновение, фиксированная команда (единственное число)

Samuel Marchant 15.04.2023 05:02

нет, классы коллекций предназначены для использования (не для расширения)

kleopatra 15.04.2023 08:13

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

Samuel Marchant 15.04.2023 19:19
Ответ принят как подходящий

Я думаю, что это скорее вопрос дизайна, когда у нас есть игроки со своими атрибутами, которые принадлежат игрокам. Затем игроки распределяются по одной команде, где у нас может быть несколько команд.

@vishalpd, пожалуйста, проверьте приведенную ниже реализацию класса, сделанную мной, с основной информацией, которую вы предоставили. Также обратите внимание, что необходимо добавить дополнительные проверки, это всего лишь скелет.

Я использовал разные конструкторы в классах для создания экземпляров объектов по-разному.

Самое главное, конструктор java var args также создан для более элегантного способа добавления игроков и команд по одному.

Кроме того, списки List<Team> teams и List<Player> players использовались внутри классов Teams и Players для сохранения каждого игрока и команды.

Класс игрока

public class Player {
        public Player(String name, Double credit, String level, Integer age, String team, Integer no) {
            this.name = name;
            this.credit = credit;
            this.level = level;
            this.age = age;
            this.team = team;
            this.no = no;
        }
    
        public Player() {
        }
    
        private String name;
        private Double credit;
        private String level;
        private Integer age;
        private String team;
        private Integer no;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Double getCredit() {
            return credit;
        }
    
        public void setCredit(Double credit) {
            this.credit = credit;
        }
    
        public String getLevel() {
            return level;
        }
    
        public void setLevel(String level) {
            this.level = level;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getTeam() {
            return team;
        }
    
        public void setTeam(String team) {
            this.team = team;
        }
    
        public Integer getNo() {
            return no;
        }
    
        public void setNo(Integer no) {
            this.no = no;
        }
    
        @Override
        public String toString() {
            return "Player{" +
                    "name='" + name + '\'' +
                    ", credit = " + credit +
                    ", level='" + level + '\'' +
                    ", age = " + age +
                    ", team='" + team + '\'' +
                    ", no = " + no +
                    '}';
        }
    
    }

Класс игроков

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
    
public class Players {
    private List<Player> players;

    public Players(Player... players) {
        this.players = new ArrayList<>();
        Arrays.stream(players).forEach(player -> this.players.add(player));
    }

    public Players(List<Player> players) {
        this.players = players;
    }

    public Players() {
        this.players = new ArrayList<>();
    }

    public List<Player> getPlayers() {
        return players;
    }

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

    public void addSinglePlayer(Player player) {
        if (player != null) {
            this.players.add(player);
        }
    }

    public void addGroupOfPlayers(List<Player> players) {
        if (!players.isEmpty()) {
            players.forEach(player -> this.players.add(player)); //Java 8 style
        }
    }
}

Командный класс

команда открытого класса {

private int id;
private String name;
private Players players;

public Team( int id, String name, Players players) {
    this.id = id;
    this.name = name;
    this.players = players;
}

public Players getPlayers() {
    return players;
}

public void setPlayers(Players players) {
    this.players = players;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

Класс команд

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Teams {
    private List<Team> teams;

    public Teams(Team... teams) {
        this.teams = new ArrayList<>();
        Arrays.stream(teams).forEach(team -> this.teams.add(team));
    }


    public Teams(List<Team> teams) {
        this.teams = teams;
    }

    public Teams() {
        this.teams =  new ArrayList<>();
    }

    public List<Team> getTeams() {
        return teams;
    }

    public void setTeams(List<Team> teams) {
        this.teams = teams;
    }


    public void addSingleTeam(Team team) {
        if (team != null) {
            this.teams.add(team);
        }
    }

    public void addGroupOfTeams(List<Team> teams) {
        if (!teams.isEmpty()) {
            teams.forEach(team -> this.teams.add(team)); //Java 8 style
        }
    }
}

Код драйвера для проверки функциональности Основной класс

import java.util.List;

public class Main {
    public static void main(String[] args) {
        Player player1 = new Player("jhon", 23.0d, "expert", 34, "super hero", 123);
        Player player2 = new Player("Rohan", 22.0d, "beginner", 28, "super hero", 124);
        Player player3 = new Player("Arnold", 16.0d, "beginner", 36, "super hero", 125);

        Player player4 = new Player("Mary", 18.0d, "beginner", 23, "gladiator", 807);
        Player player5 = new Player("Kevin", 21.0d, "beginner", 27, "gladiator", 808);
        Player player6 = new Player("Jemmy", 19.0d, "beginner", 33, "gladiator", 809);

        Players playersTeam1 =  new Players(player1, player2, player3);
        Players playersTeam2 =  new Players(player4, player5, player6);
        Team team1 =  new Team(1, "super hero", playersTeam1);
        Team team2 =  new Team(2, "gladiator", playersTeam2);

        Teams teams =  new Teams(team1, team2);
        //Print Team 1
        System.out.println("TEAM 1");
        teams.getTeams().stream().filter(team -> team.getId() == 1).forEach(team -> {
            team.getPlayers().getPlayers()
                    .stream()
                    .forEach(player -> System.out.println(player.toString()));
        });

        System.out.println();

        //Print Team 1
        System.out.println("TEAM 2");
        teams.getTeams().stream().filter(team -> team.getId() == 2).forEach(team -> {
            team.getPlayers().getPlayers()
                    .stream()
                    .forEach(player -> System.out.println(player.toString()));
        });
    }
}

Вывод результата

TEAM 1
Player{name='jhon', credit=23.0, level='expert', age=34, team='super hero', no=123}
Player{name='Rohan', credit=22.0, level='beginner', age=28, team='super hero', no=124}
Player{name='Arnold', credit=16.0, level='beginner', age=36, team='super hero', no=125}

TEAM 2
Player{name='Mary', credit=18.0, level='beginner', age=23, team='gladiator', no=807}
Player{name='Kevin', credit=21.0, level='beginner', age=27, team='gladiator', no=808}
Player{name='Jemmy', credit=19.0, level='beginner', age=33, team='gladiator', no=809}

Большое спасибо, приятель, для меня есть некоторые ограничения при изменении этих кодов. Но это помогло мне, я использовал кое-что отсюда и разместил в своем новом посте.

vishalpd 17.04.2023 21:07

Добро пожаловать :) я видел ваш другой пост, на который я уже ответил

Madhawa Gunasekara 19.04.2023 14:51

Другие вопросы по теме