1

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

for (Obj obj:list){

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

以下是一些我可以确定的事情。

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

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

有什么办法吗?我不想保留一个计数器并增加它,但如果它是这样做的最佳实践,那么我就不做了。

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;
    }
}

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

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 回答