嵌套用于循环 - 仅先读取"如果"声明

时间:2012-01-16 20:31:47

标签: java android for-loop

我有一个嵌套的for循环。它有效,有点。它只将第一个if语句读为true。在此之后,它忽略了所有可能的真实陈述。

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 个答案:

答案 0 :(得分:1)

您的代码看起来很好。正如@Hot Licks所提到的,您应该使用调试器和/或添加打印语句来查看正在发生的事情。

关于您的代码的一般评论:

  • 您应确保您的Group对象或数组中的任何内容具有implemented an equals method,否则它将始终为假。
  • 您确定setItemChecked可以处理多个值吗?如果set被调用两次,它只会覆盖以前的值吗?
  • 您的代码效率非常低(O(N ^ 2))。您可以考虑执行以下操作,即O(N)。如果阵列当然很小也没关系。如果您使用此方法,则需要implement hashCode() and equals() methods

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

希望这里有所帮助。