当前位置: 首页 > 知识库问答 >
问题:

为什么random.next(int,int)的.NET实现需要maxValue>=minvalue?

呼延河
2023-03-14

在制作一个方法将一个新创建的表单放置在我屏幕上的一个完全随机的位置上而不超出所述屏幕的界限时,我有一个有趣的代码契约消息,声明...

        Location = new Point(
            this.rnd.Next(targetBounds.Left, targetBounds.Right - Width),
            this.rnd.Next(targetBounds.Top, targetBounds.Bottom - Height));

共有1个答案

晋天逸
2023-03-14

答案很可能是“他们本来可以,但他们没有”。

编程语言和库充满了类似这样的怪癖,除了你认为是怪癖的东西,别人可能会称之为设计决策:-)

提供一个取最小值和最大值的函数,然后给出一个超出所需范围的值,这是没有意义的。如果参数是类似limit1/limit2one_end/the_other_end之类的,那么这是很公平的,但是,在名称中包含值的定义的任何情况下(例如min/maxuper/lower),您最好遵循某些指导原则,例如最小惊异原则。

def revRandom (end1, end2):
    if end1 > end2:
        return realRandom (end2, end1)
    return realRandom (end1, end2)

如果对象决定增加一点到150(例如),那么它的左侧将落在50100之间,远远超出了允许的边界。

(a)由于绝地错误,边界点可能会出现细微的边缘情况(欧比万=OB1=OFF-by-1,明白了吗?)但为了简单起见,我不考虑。

 类似资料:
  • 我一直在做一些欧拉项目练习,以提高我的C语言知识。 我编写了以下函数: 这将在17毫秒内计算。 但是,如果我改变路线 自 计算在2毫秒内完成。我是否遗漏了< code>pow(int,int)的一些明显的实现细节,导致第一个表达式的计算速度如此之慢?

  • 问题内容: 在64位系统上,Python中的整数占用24个字节。这是C语言中64位整数所需内存的3倍。现在,我知道这是因为Python整数是对象。但是,额外的内存又有什么用呢?我有我的猜测,但肯定会很高兴。 问题答案: 请记住,Python类型没有C那样有限的范围。唯一的限制是可用内存。 内存用于存储值,整数存储的当前大小(存储大小可变以支持任意大小)以及标准的Python对象簿记(对相关对象的引

  • 使用ScalaTest 3.0.0环境:Scala 2.11.8、sbt 0.13.5、IntelliJ 14.1.4 建筑sbt只有 以下测试通过。然而,IntelliJ在MyMiniTest下方标记了一条弯曲的红线,并显示警告信息: 类“MyMiniTest”必须声明为抽象的,或实现抽象成员“convertToLegacyEqualizer[T](左:T):TripleEqualSupport

  • 问题内容: 也许有人可以帮助我理解,因为我觉得我缺少一些可能会影响程序运行方式的东西。 我正在使用ByteArrayOutputStream。除非我错过了很多东西,否则此类的重点是创建一个byte []数组以供其他用途。 但是,BAOS上的“普通”写入功能采用的是整数而不是字节(ByteArrayOutputStream.write)。 根据此(原始数据类型)页面,在Java中,int是32位数据

  • 问题内容: 在下面的例子中 我不能投用,但我可以投。 我一直以为是类型,将其强制转换应该是多余的。 与线上的错误是 我在Java 6 Update 29和Java 7 Update 1中进行了尝试。 编辑:你有获得相同的行为,而不是。一元运算符和二元运算符之间确实存在混淆。 问题答案: 编译器试图减去从代替铸造来。添加修复 根据BoltClock的评论,强制转换 按预期工作,因为它是保留字,因此不

  • 在Java8中,有一个新方法返回表示字符代码的s()流。我猜很多人会希望这里有一个s流。以这种方式设计API的动机是什么?