2012-02-02 2 views
0

Я пытаюсь создать целочисленный массив, используя для цикла. Вот мой код:Создать массив, используя для цикла

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]'. Cheers –

+0

@Flex_Addicted: вы знаете, что вы можете отредактировать ответ от опечаток =) Я изменю его, thanx m8! –

+0

да, но вы можете отредактировать вопрос только в том случае, если по крайней мере 6 символов. Возможно, я ошибаюсь ... Спасибо, в любом случае. –

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

В каждом цикле вы создали новый массив с одним объектом. в этом примере вы создаете массив один раз и просто добавляете к нему объекты.

+1

Ваш ответ неверный. Вы должны хранить x в массиве, а не total, иначе у вас будет 20 объектов со значением 20. – Jeremy

+0

Возможно, '[NSNumber numberWithInt: i]' изначально означало, но YMMV. – Costique

+0

Может захотеть объяснить, что делает ФП, и почему ваш ответ решает эту проблему, только ради полноты. – matthias

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 для объяснения –

+0

@helk большое спасибо –

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]]; 
} 
Смежные вопросы