2009-07-30 80 views
1

我有一個相同類的對象列表。列表的順序並不重要。 我想要做的是(使用按位操作)確定是否應該設置某個字段的增量值。但訣竅是我 想要 需要此操作返回false(不得設置字段)只爲第一個元素。尋找一個按位運算符

for (Obj obj:list){ 

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

下面是一些im確定的東西。

當在列表的第一個元素上調用時,isZero()將返回true。

當其他元素被調用時,其不確定性。但如果在第二個元素上調用isZero()返回true,那麼它將爲所有列表返回true([3..last])

這樣做的任何方式?我不想保留一個櫃檯並增加它,但如果這樣做,那麼生病了。

+1

我不確定'按位'是你要找的字。我認爲你在尋找更多的「邏輯」運算符。按位就像在兩個整數上進行AND操作,將每個位「按位」進行AND操作。 – 2009-07-30 19:57:46

+0

if(list.indexOf(obj)== 0)? – 2009-07-30 21:01:16

回答

3

我想你需要一個計數器

1

如果isZero不能保證第一後元素返回true,那麼你不能用它來檢測一個元素是否爲第一要素,而不記得,有一個已經發生了第一個元素。所以你所提出的問題是無法完成的。

你不需要一個計數器,雖然 - 一個簡單的boolean isFirst = true,重置爲false在第一次迭代,將做的伎倆就好了。

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

我覺得一個布爾意志做,不會它?

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