【问题标题】:My Random Number Generator is Not Outputting Correctly我的随机数生成器没有正确输出
【发布时间】:2016-05-14 17:17:30
【问题描述】:

我试图让它在不同的行上打印出 2 和 2。我已经记下了单独的行部分,但由于某种原因,这个东西输出的数字是 2 然后是 3。这是为我的一个章节分配的任务,由于我的工作日程安排,让一个小组一起寻求帮助是具有挑战性的。谁能帮我理解这里发生了什么?注意:seedVal 从 4 开始。

使用 nextInt() 键入两个语句以打印两个随机整数 介于 0 和 9 之间。以换行符结尾。例如:

5

7

注意:对于这个活动,使用一个语句可能会产生不同的 输出(由于编译器以不同的顺序调用 nextInt())。 对此活动使用两个语句。

import java.util.Scanner;
import java.util.Random;

public class DiceRoll {
    public static void main (String [] args) {
        Random randGen = new Random();
        int seedVal = 0;
        randGen.setSeed(seedVal);

        System.out.println(randGen.nextInt(seedVal));

        System.out.println(randGen.nextInt(seedVal));

        return;
   }
}

【问题讨论】:

标签: java random numbers generator


【解决方案1】:

new Random() 确实是一个伪随机,每次使用时都会以相同的顺序为相同的种子返回相同的值。 下限为零,因此您需要在结果中加 1,因为您不能用骰子掷出 0。上限为 6(返回 0 到 5 之间的随机数,但我们加 1 以补偿下限 0)。 要两次打印相同的结果,您需要将其存储在一个变量中并打印两次。 幸运的是,种子 6 和绑定 6 的组合返回的第一个“随机”是 1。加 1,你就有了 2 ;-)

类似这样的:

public class DiceRoll {
    public static void main (String [] args) {
        Random randGen = new Random();
        int seedVal = 6;
        randGen.setSeed(seedVal);

       int diceValue = randGen.nextInt(6) + 1;
       System.out.println(diceValue);

       System.out.println(diceValue);

       return;
   }
}

【讨论】:

  • seedVal 对于上限来说不是一个好的变量名。种子 上限。
  • 再次,将种子与上限混淆是不好的。两者无关。
【解决方案2】:

randGen.nextInt(10) 表示可能取值的个数,从0开始,所以最大的是9。由于提示要2条语句,所以需要打印两次。

System.out.println(randGen.nextInt(10)); System.out.println(randGen.nextInt(10));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2012-09-01
    • 2012-12-03
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多