延长了java.util.Random控制代数字

问题描述:

你好我有以下任务:延长了java.util.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)做次È以下

覆盖公共INT nextInt(INT NUM)方法,使得具有50% 机会,该新方法总是返回最大数目的可能 (即,NUM-1),并用50%的几率,它返回随机的 nextInt方法将返回

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

对此提出建议?

+0

首先,看看Random类源http://developer.classpath.org/doc/java/util/Random-source.html – user1929959 2013-03-08 00:33:31

+1

*“我不太明白我的重写方法在这种情况下应该做什么。“*这似乎是任何人指定任务时最好的问题。 – 2013-03-08 00:34:15

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

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

我有一个想法,你如何能够实现,但它似乎是作弊去那么远。 ^^;

+0

谢谢无论如何,我仍然试图找出。我在我的方法中产生了一个或两个随机生成器。并使用if语句来检查随机生成器是否给1,然后返回6的最高值,如果随机生成器给出2,则返回super.nextInt();但这并没有给出50/50的机会 – 2013-03-08 02:31:55

+0

请记住,独立事件(即翻转硬币)的“50%”几率并不意味着您保证在50%的时间内拥有每个选项。我可以将一枚硬币翻转50次,并且每次都将其硬币放在头上。所以,仅仅因为你没有在100次尝试中获得“数字6的50倍和其他数字的50倍”并不意味着它没有50/50的机会。 – Onikoroshi 2013-03-11 15:24:13

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

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

+0

'public int nextInt(int num){ Random random = new Random(); int result = random.nextInt(2)+1; int finalResult = 0; if(result == 1){ finalResult = num; } 否则if(result == 2){ finalResult = random.nextInt(num); } return finalResult; }' 这并没有给出50%的机会。我在我的循环中使用了一个计数整数进行检查,我应该得到数字6的50倍和其他数字的50倍。 – 2013-03-08 01:54:41

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);