【发布时间】:2016-09-23 00:15:02
【问题描述】:
我在尝试将随机数组元素附加到新数组时遇到错误,“线程 1:EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0x0)”。
调试日志显示“致命错误:索引超出范围”
//If there are more than 6 players prioritizing the event, make a random choice. garudaLocations is an array containing the players who prioritized the event "Garuda".
if garudaLocations.count > 6 {
var finalGarudaPlayers : [Int] = []
let getRandom = randomSequenceGenerator(1, max: garudaLocations.count) //Tell RNG how many numbers it has to pick from.
var randomGarudaPrioritiesIndex = Int()
for _ in 1...6 {
randomGarudaPrioritiesIndex = getRandom() //Generate a random number.
finalGarudaPlayers.append(garudaLocations[randomGarudaPrioritiesIndex]) //ERROR: Thread 1: EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0x0)
}
debugPrint(finalGarudaPlayers) //Print array with the final priority Garuda members.
randomSequenceGenerator is a function I got from here,它确实可以生成随机数。
func randomSequenceGenerator(min: Int, max: Int) -> () -> Int {
var numbers: [Int] = []
return {
if numbers.count == 0 {
numbers = Array(min ... max)
}
let index = Int(arc4random_uniform(UInt32(numbers.count)))
return numbers.removeAtIndex(index)
}
}
为了更好地理解,我正在尝试编写一个“团队制作”程序,其中玩家被自动分类到事件中,但他们可以选择他们想要优先考虑的事件。
但是,我每个活动只能有 6 人,所以目标是获取现有的 garudaLocations 数组,随机选择 6 个索引位置,然后去掉其余的玩家。
只有在我将超过 6 名玩家提交到同一活动时,我才会收到错误消息。
非常感谢任何帮助!
【问题讨论】: