Я получаю сообщение об ошибке, «Тема 1: EXC_BAD_INSTRUCTION (код = EXC_1386_INVOP, субкодовые = 0x0)» при попытке добавить случайные элементы массива в новый массив.Swift: Получение EXC_BAD_INSTRUCTION при попытке добавить случайные элементы массива
журналотладки говорит: «Фатальная ошибка: индекс вне диапазона»
//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 игроков на одно и то же событие.
Любая помощь очень ценится!
garudaLocations - это массив, содержащий игроков, которые выбрали событие в качестве приоритета. randomGarudaPrioritiesIndex означает переменную, которая содержит случайное число (генерируемое функцией randomSequenceGenerator). Обычно, чтобы указать * специальный элемент * Index, вы должны использовать (массив [X]) для отображения элемента X в массиве, например. Я думал, что смогу использовать генератор случайных чисел вместо 0, чтобы я мог найти элемент * random * array. Разве это не так? –
и когда я debugPrint (randomGarudaPrioritiesIndex), я получаю 6 случайных целых чисел, как и ожидалось (не в массиве). –
Все это замечательно. Но это кажется неуместным; вопрос заключается в том, является ли любое из этих случайных чисел законным для использования в выражении 'garudaLocations [randomGarudaPrioritiesIndex]'. Ясно, что иногда это не так. – matt