我想创建两个新类,我可以将它们连接起来。我想创建一个球员和球队。我的目标是将球员分配给球队。
我想我的球员类是这样的;
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);
所以我想要的是计算特定团队中我的球员的平均年龄。任何想法或提示?
在现实生活中什么是团队?这是一群球员,所以你需要让Team
由Players
组成,然后提出一个问题“哪里有最大量的信息来满足普通球员年龄的计算?”这些信息放在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
}
}
简单地向团队询问普通玩家的年龄,团队会回应你。
在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
方法来获取给定的玩家并将其添加到玩家列表中。
你可以在玩家类中添加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)'它将使您的事情更容易。
在你的团队中,你需要存储一组玩家:
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()方法将播放器添加到主类的列表中