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

时间:2013-03-08 00:26:27

标签: 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 static void main(String[] args) {
        Random man = new Random();
        printDiceRolls(man);
    }
}

其次,我被要求创建一个扩展LoadedDice类的课程Random

public class LoadedDice extends Random {
    // instance variables - replace the example below with your own
    public int nextInt(int num) {
        // code right here
        return 3;
    }
}

然后我被要求覆盖public int nextInt ( int num )并执行以下操作

  

覆盖public int nextInt(int num)方法,使得50%   偶然,新方法总是返回尽可能多的数字   (即num-1),并且有50%的几率,它返回Random的内容   nextInt方法将返回

我不太明白在这种情况下我的覆盖方法应该做什么。

建议?

4 个答案:

答案 0 :(得分:1)

使用另一个Random实例给你50%的几率(例如nextInt(100)&gt; = 50)然后根据该返回值得一个常数或一个真正的随机。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

对我来说,看起来nextInt(int)函数会出现1和输入之间的数字。在根Random类中,此函数在该范围内查找随机数。他们希望你做的是改变它,以便在一半的时间内返回一个范围内的随机数,但另一半时间它将给出最大数。

在他们给出的例子中,你掷骰子,所以范围是1-6。通常情况下,nextInt会在1到6之间找到一个随机数。但是你的新函数只能执行一半的时间。另一半时间,它将返回6。

我对如何实现这一点有了一个想法,但似乎这样做会让人作弊。 ^^;

答案 3 :(得分:0)

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

如果num<Integer.MAX/2,我们可以

int x = super.nextInt(num*2);
return Math.min(x, num-1);