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