寻找一个按位运算符

时间:2009-07-30 19:54:44

标签: java c++ c bitwise-operators

我有一个同一个类的对象列表。列表的顺序并不重要。 我想做的是(使用按位运算)确定我是否应该使用增量值设置某个字段。但诀窍是我想要需要这个操作才能为第一个元素返回false(不能设置字段)。

for (Obj obj:list){

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

以下是一些肯定的事情。

当在列表的第一个元素上调用时,isZero()将返回true。

当调用其余元素时,其不确定性。但是如果调用第二个元素,isZero()返回true,那么它将为所有列表返回true([3..last])

任何方式这样做?我不想保留一个计数器并增加它,但如果它最佳实践这样做,那就生病了。

4 个答案:

答案 0 :(得分:3)

我认为你需要一个计数器

答案 1 :(得分:1)

如果isZero无法保证在第一个元素之后返回true元素,则不能使用它来检测元素是否不是第一个元素而不记住是否存在元素第一个元素已经。所以你提出的要求是无法做到的。

你不需要那里的计数器 - 一个简单的boolean isFirst = true,在第一次迭代时重置为false,这样就可以了。

答案 2 :(得分: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;
    }
}

否则,如果您不能保证以下元素为真,除非它是第二个元素,那么我只会使用一个简单的计数器:

int counter = 0;

for (Obj obj : list) {
    if (obj.isZero() (op) some_flag) {
        counter++;
    }
}

答案 3 :(得分:1)

我认为布尔会做,不是吗?

boolean notFirst = false;
for (Obj obj : list) {
  if (notFirst) {
    ...
  } else {
    notFirst = true;
  }
}