发现我无法找到解释的情况。
我在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,并且“不”应该发生
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");
}
这个演员阵容运作良好,对此的解释在于下面的答案
答案 0 :(得分:9)
count
是无符号整数(NSUInteger
)。当计数为零时,减去一个包装,产生一个大数。零小于大数。
答案 1 :(得分:2)
你的代码不明显我会用快速迭代重写
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");
}
}
因为你的循环不会使它结束......你正在组合两个逻辑上无法组合的测试......除非你的数组首先按元素数排序。
答案 2 :(得分:0)
从计数中删除-1,否则即使数组有多个对象,它也总是跳过最后一个元素。
for(int i=0; i<((NSArray *)[dados objectAtIndex:1]).count-1;i++){
NSLog(@"do anything");
}
答案 3 :(得分:0)
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");
}