1

同じクラスのオブジェクトのリストがあります。リストの順序は重要ではありません。私がやりたいことは、(ビット演算を使用して)インクリメンタル値でフィールドを設定する必要があるかどうかを判断することです。しかし、トリックは、最初の要素に対してのみ、この操作が false (フィールドを設定してはならない) を返す必要があることです。

for (Obj obj:list){

 if (obj.isZero() (op) some_flag){
   //set field
 }
}

ここに私が確信していることがいくつかあります。

リストの最初の要素で呼び出されると、isZero() は true を返します。

残りの要素を呼び出すと、不確実です。しかし、2 番目の要素で呼び出された場合、isZero() は true を返し、すべてのリスト ([3..last]) に対して true を返します。

これを行う方法はありますか?カウンターを保持してインクリメントする気はありませんが、そうするのが最善の方法である場合は、それを行うのは悪いことです。

4

4 に答える 4

3

カウンターが必要だと思います

于 2009-07-30T19:57:36.053 に答える
1

isZero最初の要素の後に戻ることが保証されていない場合はtrue、最初の要素がすでに発生したことを思い出さずに、要素が最初の要素ではないかどうかを検出するために使用することはできません。ですから、あなたが求めることはできません。

ただし、そこにカウンターは必要ありません。最初の反復でboolean isFirst = trueリセットするだけで、うまく機能します。false

于 2009-07-30T19:58:16.300 に答える
1

(obj.isZero()(op)some_flag)を返すすべての要素のカウントが必要であり、その要素の後のすべての要素がその後もtrueを返す場合は、次のように機能します。

int counter = 0;

for (Obj obj : list) {
    if (obj.isZero() (op) some_flag) {
        counter = list.size() - list.indexOf(obj);
        break;
    }
}

それ以外の場合、2番目の要素でない限り、次の要素が真であることが保証されない場合は、単純なカウンターを使用します。

int counter = 0;

for (Obj obj : list) {
    if (obj.isZero() (op) some_flag) {
        counter++;
    }
}
于 2009-07-30T20:01:01.817 に答える
1

ブール値でいいと思いますよね?

boolean notFirst = false;
for (Obj obj : list) {
  if (notFirst) {
    ...
  } else {
    notFirst = true;
  }
}
于 2009-07-30T21:03:12.020 に答える