嵌套for循环 - 只能先读取“if”语句
我有一个嵌套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);
}
}
}
你的代码看起来不错。正如@Hot Licks所提到的,您应该使用调试器和/或添加打印语句来查看正在发生的事情。
夫妇的有关您的代码一般评论:
- 你应该确保你的
Group
对象或无论是在你的阵列已经implemented anequals
method否则将永远是假的。 - 您确定
setItemChecked
可以处理多个值吗?如果set被调用两次,它是否覆盖之前的值? -
您的代码非常低效(O(N^2))。你可以考虑做一些类似于O(N)的事情。当然,数组是否很小并不重要。如果你使用这种方法,那么你将需要implement
hashCode()
andequals()
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);
希望事情有所帮助。
我的调试器没有发现任何错误,并且我的打印输出没有显示任何帮助(这就是我在这里问的原因)。当我使用一个for循环来setItemChecked时,它将所有的项目都设置为正确。但是在添加if语句时,它只能在第一个项目上工作,而不能在以下任何项目中工作。我会尝试一些你的建议,看看我得到了什么。谢谢! – DigitalKrony 2012-01-17 15:22:56
这不是从调试器抛出错误。这是关于在if语句中插入一个断点并逐步执行程序以了解发生了什么。 – Gray 2012-01-17 18:01:58
尽管如此,但却没有让我对这个问题有所了解。不过,我确实实现了你建议的代码。它和我的for循环一样运行。但是当我交换数组时,它检查了列表中的多个项目,只是错误的项目,因为迭代计数是错误的。在这一点上,我迷路了,只能认为我从光标创建的数组有问题?我会继续努力的。我相信它最终会成为一个令人厌恶的简单的东西,我错过了。干杯。 – DigitalKrony 2012-01-17 21:24:08
不。你有一个逻辑错误。使用调试器或添加打印语句来完成它。 – 2012-01-16 20:33:43
您确定inGroups甚至与组匹配吗? – Max 2012-01-16 20:35:53
首先清理你的项目。 eclipse中的Android项目喜欢损坏/不同步。 – Voo 2012-01-16 22:34:23