[英]Strange behavior of a FOR loop in objective-C
找到了我找不到解释的情况。
我在Objective-C中有一个数组数组。 这种情况下,数组有4个空数组。
NSArray *dados = [[NSArray alloc] initWithObjects:
[[NSArray alloc] init],
[[NSArray alloc] init],
[[NSArray alloc] init],
[[NSArray alloc] init],
nil];
我希望“ for”通过内部数组(如果有两个或多个数字)。
for(int i=0; i<((NSArray *)[dados objectAtIndex:1]).count-1;i++){
NSLog(@"do anything");
}
这个“ for”进入无限循环。
但是,如果我使用“ NSLog”告诉我条件为-1,则“ is”不应该发生
NSLog(@"%d",((NSArray *)[dados objectAtIndex:1]).count-1);
2014-02-20 15:37:42.563 iKL Time-sheet[31666:a0b] -1
当停止条件为0 <-1时,该“ for”怎么可能成为无限循环?
被认为是一个很好的例子,如果有人可以解释什么将能够更好地理解我所感谢的语言
--------------------- // ----------------
回答:
for(int i=0; i<(int)(((NSArray *)[dados objectAtIndex:1]).count-1);i++){
NSLog(@"do anything");
}
与此演员一起运作良好,对此的解释在于下面的答案
count
是一个无符号整数( NSUInteger
)。 当计数为零时,减去一圈就产生一个大数。 零小于大数。
您的代码不明显,我会通过快速迭代进行重写
NSArray *dados = [[NSArray alloc] initWithObjects:
[[NSArray alloc] init],
[[NSArray alloc] init],
[[NSArray alloc] init],
[[NSArray alloc] init],
nil];
for(NSArray * a in dados)
{
if([a count] >1)
{
NSLog(@"do something");
}
}
编辑:
要么
@synchronized(dados){
for(int i=0; i<[dados count]);i++){
if([[dados objectAtIndex:i]count]>1)
NSLog(@"do anything");
}
}
因为您的for循环不会进行到最后...您正在组合两个在逻辑上无法组合的测试...除非您的数组首先按元素数量排序。
从count中删除-1,否则,即使数组中包含许多对象,它也始终会跳过最后一个元素 。
for(int i=0; i<((NSArray *)[dados objectAtIndex:1]).count-1;i++){
NSLog(@"do anything");
}
NSArray *dados = @[@[],@[],@[]];
// I want a "for" to go through an internal array
// if it has two or more numbers (skipping the last one)
for( NSUInteger idx = 0;
(dados[1].count >= 2) && (idx < dados[1].count - 1);
idx++)
{
NSLog(@"do anything");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.