Ищем побитовый оператор - PullRequest
1 голос
/ 30 июля 2009

У меня есть список объектов того же класса. Порядок списка не важен. То, что я хочу сделать, это (используя побитовые операции) определить, должен ли я установить какое-то поле с инкрементным значением или нет. Но хитрость в том, что я хочу , чтобы эта операция возвращала ложь (не нужно устанавливать поле) только для первого элемента.

for (Obj obj:list){

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

Вот некоторые вещи, в которых я уверен.

При вызове первого элемента списка isZero () возвращает true.

При вызове остальных элементов его неопределенность. Но если вызывается для второго элемента, isZero () возвращает true, то он возвращает true для всего списка ([3..last])

Есть ли способ сделать это? Я не чувствую желания держать счетчик и увеличивать его, но если его ЛУЧШАЯ ПРАКТИКА сделает это, то я сделаю это плохо.

Ответы [ 4 ]

3 голосов
/ 30 июля 2009

Я думаю, вам нужен счетчик

1 голос
/ 31 июля 2009

Я думаю, что логическое будет делать, не так ли?

boolean notFirst = false;
for (Obj obj : list) {
  if (notFirst) {
    ...
  } else {
    notFirst = true;
  }
}
1 голос
/ 31 июля 2009

Если вам нужно количество всех возвращаемых элементов (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 голос
/ 30 июля 2009

Если isZero не гарантированно возвращает true для элементов после первого, то вы не можете использовать его для определения, является ли элемент первым элементом, не помня, что уже был первый элемент. Так что то, что вы просите, не может быть сделано.

Там вам не нужен счетчик - простой boolean isFirst = true, сброшенный на false на первой итерации, отлично справится с задачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...