首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问NSArray的随机元素时的EXC_ARITHMETIC

访问NSArray的随机元素时的EXC_ARITHMETIC
EN

Stack Overflow用户
提问于 2012-12-11 09:33:32
回答 1查看 8.8K关注 0票数 8

我试图随机获取数组的值,但我得到了一个错误,这是我到目前为止的代码:

代码语言:javascript
复制
NSMutableArray *validMoves = [[NSMutableArray alloc] init];

for (int i = 0; i < 100; i++){
    [validMoves removeAllObjects];

    for (TileClass *t in tiles ) {
        if ([self blankTile:t] != 0) {
            [validMoves addObject:t];
        }
    }

    NSInteger pick = arc4random() % validMoves.count;

    [self movePiece:(TileClass *)[validMoves objectAtIndex:pick] withAnimation:NO];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-11 09:55:30

您得到的错误(算术异常)是因为validMoves为空,这导致在您执行模运算时被零除。

您必须显式检查validMoves数组是否为空。另外,你应该使用arc4random_uniform来避免模数偏差。

代码语言:javascript
复制
if (validMoves.count > 0) {
    NSInteger pick = arc4random_uniform(validMoves.count);
    [self movePiece:(TileClass *)[validMoves objectAtIndex:pick] withAnimation:NO];
} else {
   // no valid moves, do something reasonable here...
}

最后,不是说arc4random_uniform(0)返回0,因此应该避免这种情况,否则您将尝试访问空数组的第一个元素,这当然会导致应用程序崩溃。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13812269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档