这有效:
int i, start, end;
start = m_cardArr.count - 1;
end = m_cardArr.count - 4;
NSLog(@"%i %i", m_cardArr.count - 1, m_cardArr.count - 4);
for(i = start; i > end; i--)
{
LabyrinthCard* labyCard = (LabyrinthCard*)[m_cardArr objectAtIndex:i];
if(labyCard.m_type != cardType || labyCard.m_usedForDoor)
{
return false;
}
}
这根本不进入 for 循环:
int i;
NSLog(@"%i %i", m_cardArr.count - 1, m_cardArr.count - 4);
for(i = m_cardArr.count - 1; i > m_cardArr.count - 4; i--)
{
LabyrinthCard* labyCard = (LabyrinthCard*)[m_cardArr objectAtIndex:i];
if(labyCard.m_type != cardType || labyCard.m_usedForDoor)
{
return false;
}
}
我不会更改内部数组的大小,因此使用 m_cardArr.count 作为条件应该可以。在这两种情况下,当数组中有 3 个元素时,NSLog 都会打印 2、-1。
我不明白我在这里缺少什么。
这是因为count
属性是类型NSUInteger
,即无符号数。当你减去4
从它开始,结果变成负数,它被解释为一个非常大的正数。
当您将该结果分配给int
,你再次将其重新解释为否定,从而解决问题。
解决这个问题的最佳方法是移动-4
到表达式的另一边,将符号更改为+
, 像这样:
for(i = m_cardArr.count - 1; i+4 > m_cardArr.count; i--) {
...
}
表达式背后的逻辑将保持不变,但您将不再看到减法引起的有符号/无符号副作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)