首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从满足条件的数组中随机选择元素?

如何从满足条件的数组中随机选择元素?
EN

Stack Overflow用户
提问于 2020-12-05 18:50:35
回答 1查看 232关注 0票数 1

我有一个player和group类,用于实例化以下内容:

代码语言:javascript
复制
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类中定义的,它将组中的所有参与者放到Array中,并在group对象上调用时返回它:

代码语言:javascript
复制
myGroup.putIntoList()

所以把这条线放在上面就会回来了:

代码语言:javascript
复制
[Player@andrew, Player@samantha, Player@tony, Player@flynn, Player@oliver]

数组的每个元素都是我先前创建的player对象。

我还在player类中定义了一个.getHealth()方法,它返回播放机的健康状态。

说到要点,我想在Group类中编写一个方法,它随机从生成的数组中选择一个播放器,该数组也不是死的(即健康状况高于0) --这就是我迄今为止所写的:

代码语言:javascript
复制
import java.util.Random;

Random myNumber = new Random();
public Player pickOutAndReturn(){
   int anotherNumber = myNumber.nextInt(5);
   return this.putIntoList()[anotherNumber];
}

问题是,它可以随机返回任何5名球员。如何更改它,使其只返回活动成员,但随机返回,而不将死玩家从数组中删除。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-05 19:05:32

在随机选择之前,使用以下方法过滤数组:

代码语言:javascript
复制
Players [] health_players = Arrays.stream(this.putIntoList())
                                  .filter(i -> i.getHealth() > 0)
                                  .toArray();

然后才从health_players中随机选择。

代码语言:javascript
复制
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];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65160723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档