java - 为什么有人会使用随机整数,然后使用模数,而不是随机 boolean 值来做出伪随机决策?

标签 java random

前言 - 我是一名 A-level 计算机科学专业的学生,​​在很大程度上,这是一个非常简单的科目。我们根据笔试、编程作业和编程测试进行评分,在编程测试中,我们会获得预先编写的代码并要求对其进行修改。

作为作业,我得到了一段旧的考试代码,作业是浏览并添加关于代码用途的注释。

这很容易做到,因为代码仅适用于基于文本的圈和十字游戏。

大部分代码还不错(一些考试委员会的代码存在严重问题),但是选择哪个玩家先走的方法有点奇怪-

char getWhoStarts() {
        char whoStarts;
        int randomNo;
        Random objRandom = new Random();
        randomNo = objRandom.nextInt(100); 
        if (randomNo % 2 == 0) {
            whoStarts = 'X';
        } else {
            whoStarts = 'O';
        }
        return whoStarts;
}

显然,这种方法是有效的,但我真的不明白为什么有人会生成一个随机整数,然后检查它是否是偶数,而他们想要的只是均匀加权的随机数。我可以理解这个方法是否有两个以上的返回可能性,或者需要加权,但在这种情况下它没有意义。

我会用这个替换它 -

char getWhoStarts() {
    Random r = new Random();
    if(r.nextBoolean()) {
        return  'X';
    } else {
        return  'O';
    }
}

此外, boolean 值可能是一个全局变量,而不是在每次调用该方法时都进行初始化。

有人可以向我解释一下,如果有理由这样做,那是什么原因? 随机整数比随机 boolean 值有什么好处吗?

谢谢。

最佳答案

这可能是 C 语言的继承,其中唯一生成随机值 (rand) 的库函数仅返回整数。实际上,仅仅查看旧实现上的模 2 的余数并不是一个好主意,因为它们众所周知地用于在偶数和奇数之间交替。我会使用提供的函数来生成 boolean 值 - 它更干净且不易出错。

关于java - 为什么有人会使用随机整数,然后使用模数,而不是随机 boolean 值来做出伪随机决策?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33742889/

相关文章:

java - 应用程序停止工作

java - 在android中使用异常

random - SAS 可以 rununi(0) 返回 0 吗?

java - 根据每个用户可预测地随机化项目列表

Java - 扩展一个类的类,并且具有一个扩展另一个类的组件的组件

java - 为什么我的三元运算符会出现 NullPointerException?

python - 计算 Python 中随机调用的次数?

c++ - 如何生成64位随机数?

python - 使用 Numpy 生成随机相关的 x 和 y 点

Java 检查日期(由整数组成)是否有效