如何在对象ArrayList中返回总和

3

如何使用for each循环计算每个球员的进球数,并将其返回到Team类中的goals()方法中?我知道我的当前返回语句是错误的,我不确定应该放什么:

import java.util.ArrayList;

public class Team {

    private String teamName;
    private ArrayList<Player> list;
    private int maxSize = 16;

    public Team(String teamName) {
        this.teamName = teamName;
        this.list = new ArrayList<Player>();
    }

    public String getName() {

        return this.teamName;
    }

    public void addPlayer(Player player) {

        if (list.size() < this.maxSize) {
            this.list.add(player);
        }

    }

    public void printPlayers() {
        System.out.println(list);
    }

    public void setMaxSize(int maxSize) {

        this.maxSize = maxSize;
    }

    public int size() {

        return list.size();
    }

    public int goals(){

        for(Player goals : list){

        }
        return list;
    }
}

public class Player {

    private String playerName;
    private int goals;

    public Player(String playerName) {

        this.playerName = playerName;
    }

    public Player(String playerName, int goals) {

        this.playerName = playerName;
        this.goals = goals;
    }

    public String getName() {

        return this.playerName;
    }

    public int goals() {

        return this.goals;
    }

    public String toString() {

        return "Player: " + this.playerName + "," + goals;
    }
}

public class Main {
    public static void main(String[] args) {
        // test your code here
        Team barcelona = new Team("FC Barcelona");

        Player brian = new Player("Brian");
        Player pekka = new Player("Pekka", 39);
        barcelona.addPlayer(brian);
        barcelona.addPlayer(pekka);
        barcelona.addPlayer(new Player("Mikael", 1)); // works similarly as the above

        System.out.println("Total goals: " + barcelona.goals());
    }
}
3个回答

3
我认为您正在寻找类似以下内容的东西:
public int goals(){
    int total = 0;
    for(Player p : list){ // for each Player p in list         
       total += p.goals();
    }       
    return total;
}

将每个Player的进球数相加,然后返回total


太好了!这行代码可行。你觉得一开始在主函数创建一个ArrayList会更容易吗? - Noah Kettler
@Noah Kettler,没问题!在Java 8及更高版本中,您可以通过调用list.stream().mapToInt(Player::goals).count()来使用聚合函数。请参阅Java 8中引入的Stream接口。 :-) - Buhake Sindi

3
return list.stream().mapToInt(Player::goals).sum();

1
请注意,这仅适用于Java 8及更高版本。 - Buhake Sindi

2

只需将它们累加到一个临时变量中:

public int goals() {
    int goals = 0;
    for(Player p : list){
        goals += p.goals();
    }       
    return goals;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接