【问题标题】:NSMutableArray for loop fills array with last itemNSMutableArray for 循环用最后一项填充数组
【发布时间】:2013-03-26 01:56:25
【问题描述】:

我正在尝试用一副扑克牌填充我的 nsmutablearray。卡片对象有花色和等级。代码如下:

-(void)loadCardNumbers {
    if(numDecks > 0)
    {
        //for each deck
        for(int i = 1; i<= numDecks; i++)
        {
            //for each suit
            for(int j = 1; j <= 4; j++)
            {
                //for each card 1-ace
                for(int k = 1; k <= 13; k++)
                {
                    //create card and add to shoe
                    Card *c = [[Card alloc]initWithSuit:j AndRank:k];

                    NSLog(@"%@", c);
                    [cards addObject:c];
                }
            }
        }
    }

还有卡片类:

@implementation Card

//return ace of spades, arbitrary card.
-(id)init
{
    return [self initWithSuit:DIAMONDS AndRank:ACE];
}
-(id)initWithSuit:(int)s AndRank:(int)r
{
    self = [super init];
    if(self)
    {
        suit = s;
        rank = r;
    }
    return self;
}

-(int)suit
{
    return suit;
}

-(int)rank
{
    return rank;
}

-(NSString *) description
{
    return [NSString stringWithFormat:@"CARD WITH SUIT %d AND RANK %d", suit, rank];
}
@end

由于某种原因,NSLog 在该方法中看起来是正确的(正确打印 1...4 代表西装,1...13 代表排名)。 但是,当我在方法完成后对数组调用 description 时,所有对象都会打印“suit 4 rank 13”,这意味着它们都指向我添加的最后一个对象。有关如何解决此问题的任何想法?

edit:正如 arkku 所指出的,我的 ivars 被声明为类变量。忘记在 Card.h 中的 ivars 周围包含大括号

【问题讨论】:

  • 显示Card 的实现,尤其是你如何定义和初始化花色和等级......我的猜测是问题是意外地在所有卡片之间共享花色和等级变量,而不是每个卡片都有自己的.
  • 新增卡片类实现
  • loadCardNumbers,你可以在登录c后立即登录cards吗?您看到cards 中添加了不同的卡片吗?
  • 所有卡片的打印都与上一个对象相同。即当有 3 张牌时,所有 3 张牌都打印为“花色 1 等级 3”
  • 通常,C 中的所有内容都是基于 0...而不是基于 1。不是什么大问题。

标签: objective-c for-loop nsmutablearray


【解决方案1】:

原始 Card.h 实现:

int suit;
int rank;
@interface Card : NSObject    

-(id)init;
...

根据 arkku 的建议正确实施:

@interface Card : NSObject
{

int suit;
int rank;
}
-(id)init;
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多