8

我正在尝试随机获取数组的值,但出现错误这是我的代码到目前为止:

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];
}
4

1 回答 1

11

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

您必须明确检查空validMoves数组的情况。你也应该使用它arc4random_uniform来避免模偏差。

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,因此应该避免这种情况,否则您将尝试访问空数组的第一个元素,这当然会使您的应用程序崩溃。

于 2012-12-11T01:55:29.920 回答