#java
#java
Вопрос:
У меня есть класс player и group, который я использовал для создания экземпляра следующего:
Player andrew = new Player(*name:* Andrew, *health:* 20)
Player samantha = new Player(*name:* Samantha, *health:* 32)
Player tony = new Player(*name:* Tony, *health:* 5)
Player flynn = new Player(*name:* Flynn, *health:* 0)
Player oliver = new Player(*name:* Oliver, *health:* 0)
Group myGroup = new Group(*player:* andrew, *player:* samantha, *player:* tony, *player:* flynn, *player:* oliver)
Следующий метод, который я определил в классе group, помещает всех игроков в группе в массив и возвращает его при вызове для объекта Group:
myGroup.putIntoList()
Таким образом, приведение строки выше вернет:
[Player@andrew, Player@samantha, Player@tony, Player@flynn, Player@oliver]
где каждый элемент массива — это объекты проигрывателя, которые я создал ранее.
Я также определил метод .getHealth() в моем классе player, который возвращает работоспособность проигрывателя.
Переходя к главному, я хочу написать метод в моем классе Group, который случайным образом выбирает игрока из этого сгенерированного массива, который также не мертв (т. Е. Здоровье выше 0) Это то, что я написал до сих пор:
import java.util.Random;
Random myNumber = new Random();
public Player pickOutAndReturn(){
int anotherNumber = myNumber.nextInt(5);
return this.putIntoList()[anotherNumber];
}
Проблема в том, что он может возвращать любые 5 игроков случайным образом. Как мне изменить его так, чтобы он возвращал только живых участников, но случайным образом, не удаляя мертвых игроков из массива?
Комментарии:
1. Привет, вы также можете поддержать ответ i.stack.imgur.com/Y7YCv.png спасибо 🙂
Ответ №1:
Перед случайным выбором отфильтруйте массив с помощью:
Players [] health_players = Arrays.stream(this.putIntoList())
.filter(i -> i.getHealth() > 0)
.toArray();
только тогда выбирай случайным образом из health_players
.
Random myNumber = new Random();
public Player pickOutAndReturn(){
Players [] health_players = Arrays.stream(this.putIntoList())
.filter(i -> i.getHealth() > 0)
.toArray();
int anotherNumber = myNumber.nextInt(health_players.length);
return health_players[anotherNumber];
}
Ответ №2:
public Player pickOutAndReturn() {
// filter for alive players
var alivePlayers = this.putIntoList().stream()
.filter(player -> player.getHealth() > 0)
.collect(Collectors.toList())
// pick a random player from list
int anotherNumber = myNumber.nextInt(alivePlayers.size());
return alivePlayer.get(anotherNumber);