2012-01-16 68 views
-2

我有一个嵌套for循环。它的工作,有点。它只读取第一个if语句为true。它在那之后忽略所有可能的真实陈述。嵌套for循环 - 只能先读取“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); 
     } 
    } 
} 
+4

不。你有一个逻辑错误。使用调试器或添加打印语句来完成它。 – 2012-01-16 20:33:43

+1

您确定inGroups甚至与组匹配吗? – Max 2012-01-16 20:35:53

+0

首先清理你的项目。 eclipse中的Android项目喜欢损坏/不同步。 – Voo 2012-01-16 22:34:23

回答

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

希望事情有所帮助。

+0

我的调试器没有发现任何错误,并且我的打印输出没有显示任何帮助(这就是我在这里问的原因)。当我使用一个for循环来setItemChecked时,它将所有的项目都设置为正确。但是在添加if语句时,它只能在第一个项目上工作,而不能在以下任何项目中工作。我会尝试一些你的建议,看看我得到了什么。谢谢! – DigitalKrony 2012-01-17 15:22:56

+0

这不是从调试器抛出错误。这是关于在if语句中插入一个断点并逐步执行程序以了解发生了什么。 – Gray 2012-01-17 18:01:58

+0

尽管如此,但却没有让我对这个问题有所了解。不过,我确实实现了你建议的代码。它和我的for循环一样运行。但是当我交换数组时,它检查了列表中的多个项目,只是错误的项目,因为迭代计数是错误的。在这一点上,我迷路了,只能认为我从光标创建的数组有问题?我会继续努力的。我相信它最终会成为一个令人厌恶的简单的东西,我错过了。干杯。 – DigitalKrony 2012-01-17 21:24:08