2012-02-02 189 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]]; 
}