【问题标题】:Why am I getting Thread 1: Fatal error: Index out of range?为什么我得到线程 1:致命错误:索引超出范围?
【发布时间】:2021-05-29 15:00:12
【问题描述】:

// 声明一个空数组 var generatedCards = 卡片

    // Array to keep track of numbers generated
    var intArray = [Int]()
    
    // Randomly generate 8 pairs of cards
    while generatedCards.count < 8 {
        
        // Generate a random number
        let randNum = Int.random(in: 1...13)
        intArray.append(randNum)
        
        for index in intArray {
            if intArray.count == 0 {
                print("Array is empty")
            } else if intArray.count > 0 {
                if intArray[index] == randNum {
                    print("There is a match, do nothing")
                } else {
                    // Create two new card object
                    let cardOne = Card()
                    let cardTwo = Card()
                    
                    // Set their image names
                    cardOne.imageName = "card\(randNum)"
                    cardTwo.imageName = "card\(randNum)"
                    
                    // Add them to the array
                    generatedCards.append(cardOne)
                    generatedCards.append(cardTwo)
                    
                    print(randNum)
                }
            }
        }
    }

我很困惑为什么我的索引总是超出范围?在将内部值与随机数进行比较之前,我正在比较数组的大小以确保它不为空。感谢您的帮助。

【问题讨论】:

    标签: arrays swift


    【解决方案1】:

    我不知道您希望代码做什么,但它正在执行以下操作:

    您生成一个随机数并将其放入 intArray。然后循环 intArray 并使用 intArray 的内容将随机数与 intArray 的第一个索引号的内容进行比较。如果 intArray 只有 1 个元素,但随机数更大,则会出现错误。 intArray 中第一个数字大于 0 的概率是 12/13。

    你不应该写:

    for index in intArray {
    ....
    }
    

    因为这为您提供了 intArray 的内容。我想你想像这样循环 intArray:

    for index in 0..<intArray.count {
        if intArray[index] == randnum ....
    }
    

    然后你的代码就可以工作了。

    亲切的问候, Mac用户T

    【讨论】:

    • 更好,也许是for index in intArray.indices
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多