当前位置:  开发笔记 > 编程语言 > 正文

如何在Smalltalk的范围内生成随机整数?

如何解决《如何在Smalltalk的范围内生成随机整数?》经验,为你挑选了3个好方法。

我正在学习的课程要求我们在smalltalk中完成所有编码(这是一个Design类).在我们的一个项目中,我希望做一些事情,并且很难找到如何做到这些.似乎大多数人所做的就是修改自己的smalltalk版本来做他们需要做的事情.我不能自由地这样做,因为当我没有相同的内置方法时,这会导致我教授的计算机出错.

这是我要做的事情:

随机数.我需要创建一个1到1000之间的随机数.现在我正在伪造它

rand := Random new.
rand := (rand nextValue) * 1000.
rand := rand asInteger.

这给了我一个0到1000之间的数字.有没有办法在一个命令中执行此操作?相近

Random between: 0 and: 1000

和/或陈述.这个人把我的生活日光所困扰.我尝试了几种不同的配置

(statement) and: (statement) ifTrue...
(statement) and (statement) ifTrue...

所以我用嵌套的ifTrue语句伪装它:

(statement) ifTrue:[
    (statement) ifTrue:[...

在smalltalk中做和/或随机的正确方法是什么?



1> Martin v. Lö..:

问题是

 (expr) and: (expr) ifTrue: aBlock

被解析为方法and:ifTrue: 如果你看一下布尔类(特别是True或False),你会注意到ifTrue:只是一个常规方法,并且没有方法和:ifTrue:存在 - 但是,plain和:确实存在.所以要明确这些是两条消息,写一下

((expr) and: (expr)) ifTrue: aBlock

对于更长的布尔组合,请注意还有方法和:和:和:和:和:和:已实现.



2> 小智..:

如果您正在使用VisualWorks,并且:将块作为参数,那么您将编写:

(aBoolean and: [anotherBoolean]) ifTrue: [doSomething].

还有&,它不会作为参数,

aBoolean & anotherBoolean ifTrue:[doSomething].

不同之处在于:仅在第一个bool为真时(类似于java)&评估块中的内容,同时始终对两者进行求值.

因此and:就派上用场了,如果第二个条件是计算量很大,或者如果它包括状态改变时,第一个条件是真的,应该只发生.(虽然这通常是一个糟糕的设计).

对于Random,只要你提供自定义方法,Random >> between: and:以及代码的其余部分,它就可以在你的教授计算机上正常运行.具体如何做,取决于您应该提供作业的格式.



3> 小智..:
(1 to: 1000) atRandom

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有