Swift:索引超出范围(用于)

时间:2019-05-02 16:30:06

标签: swift

我正在尝试进行挑战,但是我偶然发现错误,因为我的索引超出范围。我不知道可能是什么问题。

我尝试了所有想到的事情。感谢您的帮助。

func countApplesAndOranges(s: Int, t: Int, a: Int, b: Int, apples: [Int], oranges: [Int]) -> Void {
    var positionApples : [Int] = apples
    var positionOranges : [Int] = oranges


    for i in positionApples {
        positionApples[i] += a //This line
    }

    for i in positionOranges {
        positionOranges[i] += b //This line
    }

    var hitApples : Int = 0
    var hitOranges : Int = 0

    for i in positionApples {
        if i >= s && i <= t {
            hitApples += 1
        }
    }
    for i in positionOranges {
        if i >= s && i <= t {
            hitOranges += 1
        }
    }
    print(hitApples)
    print(hitOranges)
}

数组苹果和橙子应复制到positionApples和positionOranges。然后,应将值添加到数组中的每个项目,但这只会引发运行时错误。

3 个答案:

答案 0 :(得分:3)

假设apples的值为[2, 4, 6, 8],然后输入代码

for i in positionApples {
    print(i)
}

打印元素 2,4、6、8,而不打印索引 0、1、2、3,因此在

的第二次迭代中

for i in positionApples {
    positionApples[i] += a //This line
}

i是4,但结束索引实际上是3,并且代码将是。


如果需要循环索引枚举数组

for (index, element) in positionApples.enumerated() {
    print(index, element)
}

答案 1 :(得分:0)

可以说,我们按如下所示调用此方法。

countApplesAndOranges(s: 3, t: 3, a: 3, b: 3, apples: [1,2,3], oranges: [4,5,6])

在下面的代码中,for循环中i的可能值为1,2,3。但是positionApples的实际索引只能是0,1,2。当它尝试访问index = 3的数组时,它抛出

  

“致命错误:索引超出范围”

for i in positionApples {
    positionApples[i] += a //This line
}

答案 2 :(得分:0)

我想这就是你想要做的。

for i in 0 ..< positionApples.count {
    positionApples[i] += a
}

这样,您可以修改数组中的每个元素。