让我们说:
private List<Item> items = new ArrayList<Item>();
Run Code Online (Sandbox Code Playgroud)
Item我的自定义类在哪里,它可以有两个状态(布尔值)活动(true)或不活动(false)它有boolean isActive()返回当前状态.
现在我要做的是从列表中接收随机项,(from 0 to items.size() - 1)但它必须是活动的.
我想要做的是在从列表中获取随机项目后,检查它是否有效,如果没有,重复直到我们收到活动项目,如果它处于活动状态,则返回它以便我们可以使用它.
不确定它是否正确,谢谢.
我在你建议的方法中遇到的问题是,在某些条件下它会变得非常低效,特别是当你Item的列表中只有很少的活动时.另一个想法是创建一个包含列表中所有活动Items 的索引的新items列表:
List<Integer> indexes = new ArrayList<Integer>(items.size());
for (int i = 0; i < items.size(); i++)
if (items.get(i).isActive())
indexes.add(i);
Run Code Online (Sandbox Code Playgroud)
然后你只需要一个随机元素indexes,并将引用该特定位置的Itemin items.所以你的随机主动元素就是
items.get(indexes.get((int)(Math.random() * indexes.size())))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |