以下程序旨在从多只海龟中选择一只"赞助人",并将其颜色更改为白色。选择是基于海龟的财富的概率。
运行这段代码,特别是item i ranking-in-radius
行,我收到一条错误消息,内容如下:"cannot find element 43 in list...(shows list of turtles' wealth)... which is only of length 43.
"我知道我收到这个错误是因为列表从0开始,因此43个元素的列表从0到42,但我不明白为什么我写的代码不正确。我的i
从0
开始,如果i
不是<
而不是查询的海龟数量(即应停止在42),则该过程停止。有人能提出解决方案吗?谢谢
to choose-patron
let i 0
let patrons-in-radius count turtles in-radius radius with [wealth >= 80]
let ranking-in-radius sort-by > [wealth] of turtles in-radius radius with [wealth >= 80]
let total-wealth-in-radius sum [wealth] of turtles in-radius radius with [wealth >= 80]
while [i < (patrons-in-radius)][
ask turtles in-radius radius with [wealth >= 80] [
if [wealth] of self = item i ranking-in-radius [
if random 100 < ((wealth / total-wealth-in-radius) * 100) [
set color white
if any? turtles in-radius radius with [color = white] [stop]
]
set i (i + 1)
]
]
]
end
看起来set i (i + 1)
在错误的块中。现在,每次运行if [wealth]...
时,i
都会增加,但在while [i < (patrons-in-radius)]
块结束时,应该只增加i
。
尝试使用以下代码替换while
语句:
while [ i < (patrons-in-radius) ] [
ask turtles in-radius radius with [ wealth >= 80 ] [
if [ wealth ] of self = item i ranking-in-radius [
if random 100 < ( (wealth / total-wealth-in-radius) * 100) [
set color white
if any? turtles in-radius radius with [color = white] [
stop
]
]
]
]
set i i + 1
]