2012-02-02 180 views
0

我正在尝试使用for循环生成整数数组。这里是我的代码:使用for循环创建数组

int total = 20; 

for(int x = 0; x < total; x++) 
{ 
    NSArray arr = [NSArray arrayWithObjects: [NSNumber numberWithInt:total]]; 
} 

通过上述实施我得到了数组只有一个对象,是最后一个。该怎么做arr来包含从1到20的数字?

回答

2
int total = 20; 

NSMutableArray *arr = [[NSMutableArray alloc] init]; 
for(int x = 0; x < total; x++) 
{ 
    [arr addObject:[NSNumber numberWithInt:x]]; 
} 

// release the array when you are done with it. 
+0

'[[NSMutableArray alloc] init];'而不是'[NSMutableArray alloc] init]'。干杯 – 2012-02-02 17:48:16

+0

@Flex_Addicted:你知道你可以编辑来自拼写错误的回复=)我会改变它,thanx m8! – 2012-02-02 17:55:23

+0

是的,但只有在至少修改了6个字符的情况下才能编辑问题。也许我错了...无论如何谢谢。 – 2012-02-02 17:59:30

0
NSMutableArray *arr = [NSMutablearray arrayWithCapacity:total]; 
for(int x = 0; x < total; x++) 
{ 
    [arr addObject:[NSNumber numberWithInt:x]]; 
} 

在每一个循环中,您创建了一个对象新的数组。在这个例子中你创建数组一次,而不仅仅是添加对象。

+1

您的回答不正确。你应该将x存储在数组中,而不是全部,否则你将有20个对象,全部值为20. – Jeremy 2012-02-02 17:42:41

+0

也许''[NSNumber numberWithInt:i]'最初是指,但是YMMV。 – Costique 2012-02-02 17:43:52

+0

可能想解释OP做错了什么,以及为什么你的答案为了完整起见解决了这个问题。 – matthias 2012-02-02 17:44:33

2

你应该在循环之外初始化你的数组,而不是在循环中。

你的代码改成这样:

int total = 20; 
NSMutableArray *arr = [NSMutableArray array]; 
for(int x = 0; x < total; x++) 
    [arr addObject:[NSNumber numberWithInt:x]]; 
1

你每次都重新创建阵列。将NSArray设为iVar或在循环之外初始化它。

1

NSArray是一个不可变的类(这意味着你不能添加/删除对象的运行时),你在这里做什么是很奇怪的。你在循环中创建一个新的数组。

您可以使用NSMutableArray,但在循环的外部。通过这种方式,您可以在循环外部获得引用,并且可以向其添加对象。 NSMutableArray是可变的。您可以更改对象运行时。

NSMutableArray* numberArray = [[NSMutableArray alloc] init]; 

for(int x = 0; x < total; x++) 
{ 
    [numberArray addObject:[NSSnumber numberWithInt:x]]; 
} 
+0

+1解释 – 2012-02-02 17:58:06

+0

@helk非常感谢你 – 2012-02-02 18:01:00

0

每次创建新的NSArray并将其分配给NSArray *arr+arrayWithObjects:方法创建一个新的数组。 NSArray不可变,你应该使用NSMutableArray

NSArray的创建静态数组,和创建的NSMutableArray动态 阵列。

NSMuatbleArray *arr = [[NSMutableArray alloc]init]; 
for(int i =0 ; i<20 ; ++i) 
{ 
[array addObject:[NSNumber numberWithInt:i]]; 
}