【问题标题】:Swift - index out of range while trying to automatically fill an arraySwift - 尝试自动填充数组时索引超出范围
【发布时间】:2018-02-09 17:50:04
【问题描述】:

所以,我是新来的 swift 并试图做一个循环计算,我将描述它

我有一个数组,上面已经有几个元素 所以我声明了一个变量来执行一个值为 2 的循环,(i=2) 然后,从另一个方程我得到一个 int 数,它定义了数组中元素的最终数量(比如,limit = 19

所以我当前的代码如下所示:

//I declare my array
var velocityArray: [Double] = []
var densityArray: [Double] = []
//first and second element appended after declaring by another function

while i <= limit
{
var velocity = initialflow/(densityArray[i - 1] * area)
velocityArray.append(velocity)

i = i + 1
}

因此,当我尝试运行此代码时,在计算可变速度的行上出现“索引超出范围”错误。

如果我声明我的变量 limit 等于 2,那么循环变量 'i' 和 'limit' 变量都相等。事实证明它运行良好,它正确地将元素附加为数组的第三个元素,但如果我尝试执行循环它就无法工作,这可能是一个愚蠢的问题,但我似乎无法自己想办法。

感谢大家的阅读和帮助,干杯。

【问题讨论】:

  • "由另一个函数声明后附加的第一个和第二个元素" 也许,但你需要显示显示您的代码。就您实际显示的代码而言,您的任何代码都没有给densityArray 任何元素。所以它是空的。所以densityArray[0] 或其他任何东西都超出了范围。而且我们没有理由知道这种情况会发生变化,不是吗?
  • 正如@matt 所说,您需要显示更改densityArray 的代码。

标签: arrays swift loops


【解决方案1】:

目前您正在使用i 为数组编制索引,即densityArray 是空的:

while i >= 0 && i < densityArray.count
{
    var velocity = initialflow/(densityArray[i] * area)
    velocityArray.append(velocity)
    i = i + 1
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2017-05-14
    • 2023-03-29
    • 2017-01-26
    相关资源
    最近更新 更多