2014-06-09 26 views
5

Tôi gặp sự cố với chức năng drawRandomCard này.Số ngẫu nhiên nhanh

Nó hoạt động giống như trong một thời gian, nhưng cuối cùng nó làm hỏng ứng dụng.

Đây là mã:

import Foundation 


var cardDeck = Array<PlayingCard>() 

class Deck { 

    func addCard(card : PlayingCard , atTop : Bool = false){ 

     if atTop { 
      cardDeck.insert(card, atIndex: 0); 
     }else{ 
      cardDeck += card 
     } 
    } 

    func drawRandomCard() -> PlayingCard{ 
     var card = PlayingCard() 
     var randomNumber : Int = Int(arc4random()) % (cardDeck.count - 1) 
     card = cardDeck[randomNumber] 
     cardDeck.removeAtIndex(randomNumber) 
     return card 
    } 

} 
+0

Làm thế nào để tai nạn mã của bạn? Có một dấu vết ngăn xếp hoặc thông báo lỗi? Mã của bạn như được đăng trên Github dường như có một số lỗi biên dịch. –

+0

Đây là bản sao. – Sulthan

Trả lời

28

Sử dụng arc4random_uniform để tránh thiên vị modulo. Giống như sau:

let randomNumber = arc4random_uniform(150) 

Ví dụ của bạn, nó sẽ là:

let randomNumber = Int(arc4random_uniform(UInt32(cardDeck.count))) 
+0

Thực tế chính xác, nhưng hoàn toàn không liên quan đến câu hỏi. – Kevin

+3

@Kevin Không được giải thích rõ ràng, nhưng nó liên quan đến câu hỏi. Câu trả lời của Adam sẽ không tràn vào Swift 'Int' – pjs

-4

Hãy thử điều này: Int(rand()) thay vì arc4random()

+1

Làm cách nào để giảm bớt sự cố? Tôi không nói nó không, nhưng không có lời giải thích tôi không thấy sự khác biệt. –

+0

cảm ơn đề xuất, đã làm việc rất tốt. – vyudi

+0

arc4random() không hoạt động tốt với loại Int – vyudi