0

乗り越えられないことが 1 つありますが、プロジェクトはほぼ終了しています。

最初に引用させてください:

クラス Board は、特定の条件を満たすボード上のすべての要素 (ロボットによって運ばれるアイテムを除く) を返すイテレータを返すメソッドも提供する必要があります。条件の例としては、少なくとも 1000 Ws のエネルギーを持つすべての要素 (既知のエネルギーがないため、反復子は壁やサプライズ ボックスを返しません)、ボードの一部のサブ範囲内のすべての要素、ボード上のすべてのアイテムです。など

それで、要素がオンになっているボードがあります。(ロボット、特定のアイテム、壁など)

クラスでは、Iterable を実装し、必要に応じて iterator() メソッドをオーバーライドする方法を見てきましたが、今度は条件をパラメーターとしてこのイテレーターに渡す必要がありますか?

私のベストショットは、クラス Board のこのメソッドでした。

    public Iterator<Element> getAllElementsByCondition(boolean condition) {
    HashSet<Element> result = new HashSet<Element>();
    for (Element element : elements)
        if (Board.this.hasElement(element) && condition)
            result.add(element);
    return result.iterator();
}

ただし、ご覧のとおり、条件をパラメーターとしてメソッドに渡す方法がわかりません。

これがイテレータの作成方法であるかどうかもわかりません。

編集:
外部ライブラリの使用は許可されていません

4

3 に答える 3

3

Guavaのコレクション拡張機能の使用を検討してください。この場合、具体的にはCollections2.filter()またはCollections2.transform()。これを行うと、Predicate気になる条件を説明するものfilter()を指定し、コレクションを実行して一致する要素のコレクションを返すために使用できます。非常にローカライズされた例を次に示します。

public Iterator<Element> getAllElementsByCondition(Predicate<Element> condition) {
  return Collections2.filter(elements, condition).iterator(); 
}

しかし、グアバのやり方を採用すれば、構造をより劇的に変えることができるというわけではありません。

于 2012-05-15T12:25:53.450 に答える
1

Guavaのような外部ライブラリの使用が許可されていないと仮定すると、次のことができます。

  1. 1つのメソッドを持つインターフェイスを作成しFilter<T>、それを呼び出しましょうboolean match(T obj)
  2. たとえば、条件をテストFilter<Element>するメソッドを実装するイテレータにaを渡します。matchreturn "The name I'm looking for".equals(element.getName());
  3. その場合は、ループでテストしfilter.match(element)ますresult.add(element)

編集
あなたの新しい方法は次のようになります:

public Iterator<Element> getAllElementsByCondition(Filter<Element> filter) {

そして、あなたはそれをこのように呼ぶでしょう:

Iterator<Element> it = getAllElementsByCondition(new Filter<Element> () {
    public boolean match(element candidate) {
        return /* Enter your condition here */;
    }
});

条件は次のようになります。

candidate.getEnergy() > 1000
于 2012-05-15T12:26:29.000 に答える
0

タスクを明確にする必要があると思います。あなたの方法はうまくいくはずですが、のようなものに絞り込む必要がありますgetAllElementsWithEnergyGreaterThan(int minEnergy)。そしてあなたのループであなたはあなたのエネルギーをminEnergyと比較します。

于 2012-05-15T12:26:05.333 に答える