您好我有以下任务:
首先,我给出了这个使用方法生成随机数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方法将返回
我不太明白在这种情况下我的覆盖方法应该做什么。
建议?
答案 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);