簡體   English   中英

訪問NSArray的隨機元素時為EXC_ARITHMETIC

[英]EXC_ARITHMETIC when accessing random elements of NSArray

我正在嘗試隨機獲取數組的值,但到目前為止我這里遇到了錯誤:

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

您得到的錯誤(算術異常)是因為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 ,因此應避免這種情況,否則您將嘗試訪問空數組的第一個元素,這當然會使您的應用程序崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM