有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类连接两个面向对象的java类

我希望创建两个新类,在那里我可以连接这些类。 我想创建一个玩家和团队类。我的目标是将一名球员分配给一支球队。基本上,我希望使用类中的类作为属性

我想象我的球员阶级是什么样的

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

所以我想做的是计算我的球员在特定球队的平均年龄。有什么想法或建议吗


共 (5) 个答案

  1. # 1 楼答案

    您可以将getter和setter方法添加到player类中。如果你愿意,你也可以在玩家课上做类似的事情:

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

    }

    现在你可以很容易地为球队添加球员。但成员不能是字符串。我的建议是使用ArrayList。你可以找到很多关于这方面的文章

    你可以使用“for(Player a:ListName)”,这会让你的事情变得更简单

  2. # 2 楼答案

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

    例如:

    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
    

    注意-上面的例子使用了一个列表,但你也可以简单地使用一个数组,它还使用streams 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();
    }
    

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

  3. # 3 楼答案

    我的解决方案

    public class Team {
    List<Player> allPlayer;
    
    // constructor, getter and setters
    }
    

    public class Player {
    String name;
    // constructor, getter and setters
    }
    

    谢谢你的帮助

  4. # 4 楼答案

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

    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
        }
    }
    

    简单的询问团队球员的平均年龄,团队会回复你

  5. # 5 楼答案

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

    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()方法将玩家添加到main类的列表中