1

私たちが持っているとしましょう:

private List<Item> items = new ArrayList<Item>();

私のItemカスタムクラスは、2つの状態(ブール値)アクティブ(true)または非アクティブ(false)を持つことができ、isActive()現在の状態を返すブール値を持っています。

今私がやろうとしているのは、リストからランダムなアイテムを受け取ることです(from 0 to items.size() - 1)が、それはアクティブでなければなりません。

私が考えていたのは、リストからランダムなアイテムを取得した後、アクティブかどうかを確認し、アクティブでない場合はアクティブなアイテムを受け取るまで繰り返し、アクティブな場合はそれを返して使用できるようにすることです。

正しいアプローチかどうかわかりません、ありがとう。

4

5 に答える 5

1

これは、アクティブなアイテムと非アクティブなアイテムの比率によって異なります。ほとんどのアイテムがアクティブであると予想される場合は、あなたのアイデアを使用してください。それ以外の場合は、ARS のソリューションを使用できます。

ノート:

再試行アプローチには注意事項があります。すべてのアイテムが非アクティブな場合、無限ループになります。

于 2013-03-22T12:34:10.283 に答える
1

リストを繰り返し処理し、すべてのアクティブなアイテムを新しいリストに収集することで、より詳細に制御できると思います。

private List<Item> activeItems = new ArrayList<Item>();

foreach (Item x in items)
{
    if (x.Isactive) activeItems.Add(x);  
}

アクティブなアイテムのみのリストを取得したら、そのリストからランダムな位置を取得します。

于 2013-03-22T12:36:44.030 に答える
0

アクティブなアイテムのみを使用して新しい(または他の可能性がある)ArrayListを返すメソッドを拡張および作成できます。ArrayListCollection

class MyItemArrayList extends ArrayList {

public ArrayList getActiveItems() {

ArrayList<Item> activeArrayList = new ArrayList<>();

for (Item item : this) {

    if (item.isActive()) {
        activeArrayList.add(item);
    }
}



   return activeArrayList;


 }
}
于 2013-03-22T12:36:36.173 に答える