首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有未设置的全局变量的代码怎么会不返回'nobody‘呢?

带有未设置的全局变量的代码怎么会不返回'nobody‘呢?
EN

Stack Overflow用户
提问于 2019-09-05 02:08:22
回答 1查看 25关注 0票数 0

我有一个学生,他创建了一个名为random-patch的全局变量和一个名为elevation的patch变量。然后,他们使用elevation来随机选择一个补丁来设置random-patch。问题是代码正在运行,并且在没有设置patch变量elevation的情况下选择一个补丁。我知道它会自动设置为零,但这段代码通常不应该出现任何人吗?任何帮助理解这个问题的人都将不胜感激。

代码:

代码语言:javascript
复制
globals [ random-patch ]

patches-own [ elevation ]

to setup
  ca

  set random-patch one-of patches with [ elevation = (random 50) ]

;Also still reports a patch if only the pre to-setup code is entered and the
;following is entered on the interface observer console:

show one-of patches with [elevation = (random 50)]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 02:48:03

这实际上是一个非常细微的错误。它没有返回nobody的原因是因为它在从中选择之前构造了代理集。它所做的是独立测试每个补丁,并为每个补丁绘制一个随机整数。下面的代码将这两个步骤分开。

代码语言:javascript
复制
globals [ random-patch ]

patches-own [ elevation ]

to setup
  clear-all
  let zeros patches with [ elevation = (random 50) ]
  type "Patches with zero: " print count zeros
  set random-patch one-of zeros  print random-patch
end

如果使用标准设置,则有1089个补丁。1/50的随机抽取将返回0,因此1/50或大约22个will补丁将满足条件并位于隐式构造的补丁集中。

在您的原始代码中将random 50更改为random 100000,您可能会得到nobody。如果您分离出绘图,它也会像您预期的那样运行(所以先使用let roll random 50,然后使用set random-patch one-of patches with [ elevation = roll ]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57793747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档