首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何过滤不包含0的随机数生成器

如何过滤不包含0的随机数生成器
EN

Stack Overflow用户
提问于 2019-02-08 03:18:59
回答 1查看 262关注 0票数 0

如何修复random: expects (or/c (integer-in 1 4294967087) pseudo-random-generator?) or a pseudo-random-generator, given 0错误?

代码语言:javascript
复制
(require 2htdp/universe)
(require 2htdp/image)

(define-struct sample(x))
(define BACKGROUND (empty-scene 100 100))
(define CIRCLE (ellipse 10 10 "solid" "red"))

(define (rand d)
  (random d))

(define (randoll d)
  (cond [(even? (rand d))(rand d)]
        [(< (rand d) 6)7]
        [(= (rand d) 0)7]
        [else 7]))

(define (main ws)
  (big-bang ws
      (on-tick randoll)
      (to-draw render)))

(define (render d)
      (place-image CIRCLE (randoll d) 6 BACKGROUND))

(主100)随机:期望(或/c(整数-in 1 4294967087)伪随机生成器?)或者伪随机生成器,给定0。 希望它能在偶数的时候不断地改变位置,但是这发生了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-08 09:34:50

1添加到传递给random的参数如何?只要输入是>= 0,它就能正常工作--您所收到的错误只是说明不能将0作为参数传递给random

代码语言:javascript
复制
(define (rand d)
  (random (+ d 1)))

顺便说一句,randoll看上去不太对。为什么你要测试随机值是否是偶数,只是为了返回另一个随机值,我们不知道它是否会是偶数?看起来,如果随机值为零,或者在所有其他情况下,您只想返回7。如果符合你的要求,最好试试这个:

代码语言:javascript
复制
(define (randoll d)
  (let ([r (rand d)])   ; call `rand` exactly once
    (cond [(zero? r) 7] ; 0 is even, so check this first
          [(even? r) r] ; return `r` only if it's even
          [else 7])))   ; default case

我不确定randoll的预期值范围是什么,但在我看来,大多数情况下它只返回7。这是你想要的吗?

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

https://stackoverflow.com/questions/54585580

复制
相关文章

相似问题

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