如何在多个 Java 类中初始化构造函数中的字段

问题描述 投票:0回答:2

我已经上了 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);
    }

我试过像这样将一些玩家添加到玩家类的玩家列表中

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"));
    }

但我不确定我在做什么,或者这是否是正确的方法。 我不知道如何将这些球员与他们各自的球队联系起来。

here is the snippet of class diagram

java class constructor initialization
2个回答
0
投票

没有编译器检查的初步尝试。大多数著名的教程都展示了……扩展 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

0
投票

我认为这更像是一个设计问题,我们让玩家具有属于玩家的属性。 然后球员被分配到一个团队,我们可以有多个团队。

@vishalpd,请根据您提供的基本信息检查我完成的以下类实现。 另请注意,应添加额外的验证,这只是一个骨架。

我在类中使用了不同的构造函数来以不同的方式实例化对象。

最重要的是,还创建了 java var args 构造函数,以更优雅的方式逐一添加球员和球队。

此外,

List<Team> teams
List<Player> 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}
© www.soinside.com 2019 - 2024. All rights reserved.