扩展java.util.Random以控制数字的生成

扩展java.util.Random以控制数字的生成,java,random,Java,Random,您好,我有以下任务: 首先,我得到的代码使用一种方法生成100次随机数: public class Q3 { public static void printDiceRolls(Random randGenerator) { for (int i = 0; i < 100; i++) { System.out.println(randGenerator.nextInt(6) + 1); } } public

您好,我有以下任务:

首先,我得到的代码使用一种方法生成100次随机数:

public class Q3 {
    public static void printDiceRolls(Random randGenerator) {

        for (int i = 0; i < 100; i++) {
            System.out.println(randGenerator.nextInt(6) + 1);
        }
    }

    public static void main(String[] args) {
        Random man = new Random();
        printDiceRolls(man);
    }
}
然后,我被要求覆盖
公共int-nextInt(int-num)
,并执行以下操作

重写公共int-nextInt(int-num)方法,使 很可能,新方法总是返回尽可能大的数字 (即num-1),并且有50%的几率返回随机数的值 nextInt方法将返回

我不太明白我的重写方法在这种情况下应该做什么


建议?

对我来说,似乎
nextInt(int)
函数的数字介于1和输入之间。在root
Random
类中,此函数查找该范围内的随机数。他们想让你做的是改变它,让一半的时间返回范围内的随机数,但另一半的时间会给出最大数

在他们给出的例子中,你在掷骰子,所以范围是1-6。通常,
nextInt
会找到一个介于1和6之间的随机数。但是你的新功能只能完成一半的时间。另一半时间,它将返回6


我有一个关于如何实现这一点的想法,但走那么远似乎是作弊

使用另一个随机实例为您提供50%的机会(例如,nextInt(100)>=50),然后基于该实例返回一个常数或一个真正的随机数。

我想一种方法是使用均匀分布的(另一个?)随机数生成器,并将其设置为返回0或1。0/1将是您做出决定的50%。。。。返回super.nextInt或最大值

if(super.nextBoolean())
    return num-1;
return super.nextInt(num);

如果
numFirst,请参阅“我不太明白我的重写方法在这种情况下应该做什么”中的随机类源代码。这似乎是指定任务的人最好解决的问题。'public int nextInt(int num){Random Random=new Random();int result=Random.nextInt(2)+1、 int finalResult=0;if(result==1){finalResult=num;}else if(result==2){finalResult=random.nextInt(num);}return finalResult;}这并没有给出50%的机会。我在for循环中使用了count整数进行了检查,我应该得到数字6的50倍和其他数字的50倍。无论如何,谢谢,我仍在努力寻找答案。我在我的方法中制作了一个随机生成器,输出1到2个。并使用if语句检查随机生成器是否给出1,然后返回最高值6,如果随机生成器给出2,则返回super.nextInt();但这并没有给你50/50的机会记住,在独立活动中(即,掷硬币)有50%的机会并不意味着你保证在50%的时间里拥有每个选项。我可以把一枚硬币掷50次,每次都要正面朝上。所以,仅仅因为你在100次尝试中没有得到“50倍于数字6和50倍于其他数字”并不意味着它没有50/50的机会。
if(super.nextBoolean())
    return num-1;
return super.nextInt(num);
int x = super.nextInt(num*2);
return Math.min(x, num-1);