Вложено для циклов - только чтение первого оператора «если» - PullRequest
0 голосов
/ 17 января 2012

У меня есть вложенный цикл.это работает, вроде.Это только читает первое утверждение if как истинное.После этого он игнорирует все возможные истинные характеристики.

for(int i = 0; i < inGroups.length; i++)
{
    for(int g = 0; g < theGroups.length; g++)
    {
        if( inGroups[i].equals(theGroups[g]) )
        {
            gLV.setItemChecked(g, true);
        }
    }
}

1 Ответ

1 голос
/ 17 января 2012

Ваш код выглядит нормально. Как упоминалось в @Hot Licks, вы должны использовать отладчик и / или добавить операторы print, чтобы увидеть, что происходит.

Пара общих комментариев о вашем коде:

  • Вы должны убедиться, что ваш Group объект или все, что находится в ваших массивах, реализовало equals метод , иначе он всегда будет ложным.
  • Вы уверены, что setItemChecked может обрабатывать более одного значения? Если set вызывается дважды, это просто перезаписывает предыдущее значение?
  • Ваш код очень неэффективен (O (N ^ 2)). Вы можете подумать о том, чтобы сделать что-то вроде следующего: O (N). Это не имеет значения, если массивы небольшие, конечно. Если вы используете этот метод, вам потребуется реализовать hashCode() и equals() методы .

    Set<Group> inGroupsSet = new HashSet<Group>();
    // load inGroups into a set
    for (Group group : inGroups)
        inGroupsSet.add(group);
    // look up each Group in theGroups in the set
    for (int g = 0; g < theGroups.length; g++)
        if (inGroupsSet.contains(theGroups[g]))
            gLV.setItemChecked(g, true);
    

Надеюсь, что-то здесь поможет.

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