簡體   English   中英

如何從滿足條件的數組中隨機選擇元素?

[英]How do I randomly pick elements from an Array that satisfy a condition?

我有一個播放器和組 class 我用來實例化以下內容:

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)

我在組 class 中定義的以下方法將組中的所有玩家放入一個數組中,並在組 object 上調用時返回它:

myGroup.putIntoList()

所以把上面的行放在上面會返回:

[Player@andrew, Player@samantha, Player@tony, Player@flynn, Player@oliver]

其中數組的每個元素都是我之前創建的播放器對象。

我還在我的播放器 class 中定義了 a.getHealth() 方法,它返回播放器的健康狀況。

進入重點,我想在我的組 class 中編寫一個方法,該方法從生成的數組中隨機選擇一個還沒有死的玩家(即健康高於 0)這是我到目前為止所寫的:

import java.util.Random;

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

這樣做的問題是它可以隨機返回任意 5 個玩家。 如何更改它以使其僅返回活着的成員但隨機返回而不從數組中刪除死去的玩家

在隨機選擇之前,使用以下方法過濾數組:

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];
}
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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM