Создание 20 объектов в цикле - PullRequest
       0

Создание 20 объектов в цикле

1 голос
/ 22 сентября 2011

Мне нужна помощь новичка. В общем, я пытаюсь создать 20 отдельных объектов (игроков). У каждого игрока есть имя, возраст и рост.

Вместо того, чтобы писать «Person * player = [[Person alloc] init];» Двадцать раз я сделал петлю. Я думаю, что цикл сработал, потому что [myArray count] имеет 20 объектов.

Мои вопросы:

Являются ли эти 20 объектов уникальными (все с одинаковым именем, возрастом, ростом)?

Каков наилучший способ дать каждому объекту в каждом элементе MyArray имя, возраст, рост?

Итак, моя конечная цель - сделать что-то вроде этого:

NSLog(@"%@ is %i high and is %i years old", player1.name, player1.height, player1.age);

NSLog(@"%@ is %i high and is %i years old", player2.name, player2.height, player2.age); 

и т.д ...

Надеюсь, вышесказанное имеет смысл, и я очень ценю вашу помощь.

#import <Foundation/Foundation.h>

#import "Person.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    NSMutableArray  *myArray = [[NSMutableArray alloc]initWithCapacity:20];


    for (int i = 0; i < 20; i++)
    {
        Person *player = [[Person alloc] init];
        player.age = 10;
        player.height = 10;
        player.name = @"player";
        [myArray addObject:player];       
        [player release];         
    }

    NSLog(@"The number of players in myArray = %i", [myArray count]); // I now have 20 players (objects) in myArray.

//How can I now give each player object an individual name, age & height ??     
    [pool drain];
    return 0;
}

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011
  • Являются ли объекты уникальными? ДА, они есть.
  • Какой лучший способ дать каждому объекту имя, возраст, рост? этот вопрос неясен, поэтому то, как вы указали возраст, рост и имя для своих объектов в цикле, является правильным, но, конечно, вы предоставляете одинаковую информацию всем объектам; присвоение им уникальных имен зависит от логики вашего приложения, например, вы можете произвольно назначить возраст следующим образом:
player.age = arc4random()%90;

Вы можете сделать то же самое для высоты (в конечном итоге с помощью немного более сложной формулы, например, 140 + arc4random ()% 50). Наконец, для высоты вы можете назначить производное имя следующим образом:

player.name = [NSString stringWithFormat:@"Player-%d",i];

, который присваивает имена Player-0, Player-1, ...

  • Наконец, чтобы распечатать данные в NSLog:
NSLog(@"Player %d : name=%@ height=%d age=%d",i,player.name,player.height,player.d)

или в другом цикле:


int i = 0;
for(Person *player in myArray) {
  NSLog(@"Player %d : name=%@ height=%d age=%d",i,player.name,player.height,player.d);
  i++;
}
0 голосов
/ 23 сентября 2011

Пара предметов.

Если я правильно понимаю ваш последующий вопрос, вам нужно получить доступ к объектам, сохраненным в вашем массиве, чтобы вы могли изменить значения их свойств.

Тем не менее, вышеприведенный плакат ответил на фактический вопрос, который вы задали, и вы должны пометить его правильно.

Если вы хотите просмотреть каждый элемент в массиве, вы бы сделали следующее:*

for (int i=0; i<[players count]; i++) {
Player *aPlayer = [players objectAtIndex:i];
aPlayer.name = @"joe";
}

Если вы хотите получить доступ только к одному игроку:

Player *aPlayer = [players objectAtIndex:4];
aPlayer.name = @"joe";

Также вы можете настроить класс игрока и переопределить описание, чтобы вам не приходилось многократно вводить сложныйNSLog заявления.

-(NSString *)description{
    return [NSString stringWithFormat:@"name = %@ age = %d height = %d", self.name, self.age, self.height];
}

Переопределив метод description, вызывающий NSLog для вашего объекта, вы получите строку из этого оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...