连接两个类java面向对象 - 团队和播放器

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

我想创建两个新类,我可以将它们连接起来。我想创建一个球员和球队。我的目标是将球员分配给球队。

我想我的球员类是这样的;

public class Player {
    String first_name;
    String last_name;
    int age;
}

和我的团队一样;

public class Team {
    String Member1;
    String Member2;
}

和我的主要课程包括;

Player Player1 = new Player("Peter", "Jensen", 24);

所以我想要的是计算特定团队中我的球员的平均年龄。任何想法或提示?

java class object member
4个回答
3
投票

在现实生活中什么是团队?这是一群球员,所以你需要让TeamPlayers组成,然后提出一个问题“哪里有最大量的信息来满足普通球员年龄的计算?”这些信息放在Team类(玩家列表)中,我们需要将计算平均年龄的方法放到Team类。它被称为信息专家原则,是众多优秀的oop设计原则之一。

https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)#Information_expert

所以这样代码就是这样的:

玩家类:

  public class Player {
        private String firstName;
        private String lastName;
        private int age; 

        public Player(String firstName, String lastName, int age) {
            this.firstName = firstName;
            this.lastName = lastName;
            this.age = age;
        }

        public String firstName() {
            return firstName;
        }

        public String lastName() {
            return lastName;
        }

        public String age() {
            return age;
        }

    }

团队课程:

  public class Team {
        private List<Player> players;

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

        public void add(Player player) {
            players.add(player);
        }

        public void remove(Player player) {
            players.remove(player);
        }

        public double averageAge() {
            double sum = 0;
            double amount = players.size();
            for (Player player : players) {
                sum += player.age();
            }
            return sum / amount;
        }

    }

之后,我们能够以各种方便的方式使用这些类,例如:

public class Test {

    public static void main(String[] args) {
        Team team = new Team(Arrays.asList(new Player[] {
            new Player("Peter", "Jensen", 24),
            new Player("Foo", "Bar", 50)
        }));
        System.out.println(team.averageAge()); // 37
    }
}

简单地向团队询问普通玩家的年龄,团队会回应你。


2
投票

Team类中创建一个List或一组玩家(如果允许有固定数量的玩家)以代表玩家团队。

例:

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

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

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

然后创建您的对象列表:

Team team = new Team();
team.setPlayers(new ArrayList<>(Arrays.asList( new Player("Peter", "Jensen", 24),
                new Player("Danny", "peters", 19),
                new Player("Michael", "Jones", 32))));

那么你可以像这样计算平均年龄:

double averageAge = team.getPlayers()
                        .stream()
                        .mapToDouble(Player::getAge)
                        .average().orElse(0); // 0 if no player present in the list

注意 - 上面的例子使用了一个列表,但你可以很容易地使用一个数组,它也使用流API,如果你不熟悉它,那么你可以这样做:

double averageAge = 0; // default if no player is present
List<Player> players = team.getPlayers();
for (Player player : players) {
     averageAge += player.getAge();
}

if(players.size() >= 1) {
    averageAge /= players.size();
}

如果由于某种原因你也希望能够一次添加一个给定的玩家,那么你可以在void addPlayer(Player player){...}类中创建一个Team方法来获取给定的玩家并将其添加到玩家列表中。


0
投票

你可以在玩家类中添加getter和setter方法。如果你想要你可以在玩家类中做这样的事情:

public static Player newInstance(String n,String Sn,int age){
    Player a=new Player(n,Sn,age);
    return a;

}

现在你可以轻松地将玩家添加到team.But成员不能是String.My建议使用ArrayList.You可以找到很多关于它的文章。

并且您可以使用'for(播放器a:ListName)'它将使您的事情更容易。


0
投票

在你的团队中,你需要存储一组玩家:

public class Team{
    private List<Player> players;

    public Team() {
        players = new ArrayList<?>();
    }

    public void addPlayer(Player player) {
        players.add(player);
    }

    public Int getAverageAge() {
        Int count =0;
        Int sumAge=0;
        for(Player player:players) {
            sumAge+=player.getAge();//this getter should be in Player class
            count++;
        }
        return sumAge/count;
    }
}

使用addPlayer()方法将播放器添加到主类的列表中

© www.soinside.com 2019 - 2024. All rights reserved.