簡體   English   中英

連接兩個類java面向對象

[英]Connecting two classes java object-oriented

我希望創建兩個新類,我可以在其中連接它們。 我想創建一個玩家和團隊類。 我的目標是將一名球員分配到一支球隊。 基本上我希望在一個類中使用一個類作為屬性。

我想象我的播放器類是這樣的;

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

所以我想做的是計算我的球員在特定球隊的平均年齡。 任何想法或提示?

在現實生活中,什么是團隊? 它是一群玩家,所以你需要讓TeamPlayers組成,然后問一個問題“哪里有最大量的信息來完成平均玩家年齡的計算?” 此信息放置在Team類(玩家列表)中,我們需要將計算平均年齡的方法放置到Team類中。 它被稱為信息專家原則,是眾多優秀的 oop 設計原則之一。

https://en.wikipedia.org/wiki/GRASP_(面向對象設計)#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();
}

如果由於某種原因您還希望能夠一次添加給定的玩家,那么您可以在Team類中創建一個void addPlayer(Player player){...}方法來獲取給定的玩家並將其添加到列表中球員。

在您的團隊中,您需要存儲一組球員:

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() 方法將您的播放器添加到主類的列表中

您可以將 getter 和 setter 方法添加到播放器類。此外,如果您願意,可以在播放器類中執行以下操作:

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

}

現在您可以輕松地將玩家添加到團隊中。但是成員不能是String。我的建議是使用ArrayList。您可以找到很多關於此的文章。

你可以使用'for(Player a:ListName)'它會讓你的事情變得更容易。

我的解決方案

public class Team {
List<Player> allPlayer;

// constructor, getter and setters
}

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

感謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM