在这段代码中,我为2个不同的数组生成了值。一个数组中的值取决于另一个数组中的值。它的工作方式是在数组next_month_initial
中,该值取决于water_deficit
数组中的相应值。但是,water_deficit
数组值取决于next_month_initial
数组中的先前(不对应)值。因此,为什么water_deficit array
的第一个值是独立计算的,因为next_month_initial
数组中不存在先前的值。我希望这很清楚,可以理解。
代码可能略有混淆,但内容明智是正确的,计算是正确的。没有显示错误消息,但程序无法正确计算数组中的所有值。当我打印数组时,不是看到列出了正确值的数组,而是说“Playground execution failed”。我不知道为什么会这样,因为我可以看到这个代码应该有效。
var rainfall = [38,94,142,149,236,305,202,82,139,222,178,103]
let max_h2Ostore = 150
let carry_forward = 150
var evap_transpiration: [Int] = []
var water_deficit: [Int] = []
var next_month_initial: [Int] = []
// Generating values for water_deficit array
//The first values is generated differently to the remaining values
water_deficit[0] = rainfall[0] + carry_forward - evap_transpiration[0]
for i in 0...11 {
var x = i
if water_deficit[i] <= 0 {
next_month_initial.append(0)
} else if water_deficit[i] >= max_h2Ostore {
next_month_initial.append(max_h2Ostore)
} else {
next_month_initial.append(water_deficit[i])
}; if i != 11 {
x++
water_deficit.append(next_month_initial[i] + rainfall[x] - evap_transpiration[x])
}
}
println(water_deficit)
答案 0 :(得分:1)
所以要让你的代码能够工作&#34;你必须
使用12个值声明rainfall
(我猜你已将它定义在某个地方,但它不在您的问题中):
let rainfall = [50, 13, 49, 30, 4, 5, 2, 9, 94, 48, 74, 39]
使用12个值声明evap_transpiration
:
var evap_transpiration: [Int] = [30, 19, 59, 48, 39, 29, 49, 19, 49, 29, 49, 38]
将循环前的行更改为(您无法设置第0个元素,因为此时没有):
water_deficit.append(rainfall[0] + carry_forward - evap_transpiration[0])
所以你的代码有效。我不知道它是否正常工作,因为我不知道你想要做什么,但至少它并没有崩溃。如果你做了你期望它做的事情(它并没有让你崩溃!)那么我建议你在Code Review发布你的代码,因为这是我见过的最可怕的Swift代码(抱歉)。我还建议您阅读Apple的The Swift Programming Language书,它是免费的,非常容易理解。 (如果您将其发布在Code Review上,那么请添加一个很好的描述它的作用)