Как рассчитать среднее значение в ООП?

#java #average

Вопрос:

Я знаю, как рассчитать среднее значение в процедурном программировании, за исключением того, что в ООП я не вижу, как это сделать:

У меня есть 2 объекта, и я хочу рассчитать средний возраст:

 class Main {
  public static void main(String[] args) {
    List<Player> players = new ArrayList<Player>();

    players.add(new Player("Eric", 31, true));
    players.add(new Player("Juliette", 28, false));
 

В моем классном плеере у меня есть это

 public class Player {

  public String name;
  public int age; 
  public boolean sex;

  public Player(String name, int age, boolean sex){
    this.name = name;
    this.age = age;
    this.sex = sex;
  }
 

В моем методе CalculateAverage() я не вижу, как это сделать? У меня проблема с моей петлей..

 public static void CalculateAverage(List <Player> players){
    int sumAge =  0;

    for(Player player : players){
            
    }
  } 
 

Комментарии:

1. Сложите все значения, которые вы хотите усреднить. Разделите общее количество на количество значений.

2. Возраст каждого игрока можно оценить с помощью player.age . Добавьте это в for цикл, чтобы найти sumAge : sumAge = player.age . Все, что теперь осталось сделать, это разделить sumAge на количество игроков. Вы должны попробовать это самостоятельно.

Ответ №1:

Способ 1:

внутри вашего цикла суммируйте все возрасты, а затем разделите сумму на общее количество возрастов( players.size() )

  List<Player> players = new ArrayList<Player>();

    players.add(new Player("Eric", 31, true));
    players.add(new Player("Juliette", 28, false));
    double sum = 0;
    for(Player player : players){
        sum = sum  player.age;
    }
    double average = sum/players.size();
    System.out.println(average);
   
 

Способ 2:

используйте потоки Java 8. Преобразуйте свой список в поток ( players.stream() ), затем сопоставьте свой возраст с двойным ( mapToDouble() ), затем назовите средний.

*NB average() возвращает необязательный параметр. используйте get ( optionalAverage.get() ), чтобы получить фактическое значение.

  List<Player> players = new ArrayList<Player>();
    players.add(new Player("Eric", 31, true));
    players.add(new Player("Juliette", 28, false));
    final OptionalDouble optionalAverage = players.stream().mapToInt(Player::getAge).average();
    System.out.println(optionalAverage);