我写了这段代码。问题在于玩家n1始终是赢家。有人可以帮我做这个练习吗?
public class Devoir9 {
public static void main(String[] args) {
int result = 0;
Random r = new Random(6);
for (int i = 0; i < 6; i++) {
result = r.nextInt(6);
result++; // result= result+1 or result++ sont les mêmes.
// System.out.println(" you rolled :" + result);
if (result == 6) {
System.out.println(" Player A is winner " + result);
JOptionPane.showMessageDialog(null, " SPELARE 1 VINNER ");
} else if (result != 6) {
System.out.println(" Player B and A are loosing " + result);
}
}
}
}
答案 0 :(得分:1)
问题是您要为Random实例定义一个硬编码的种子6。不要定义数字,因为使用该特定种子每次都会得到相同的结果。用户想要向随机实例添加种子的原因通常是为了测试代码,并且他们想要相同的“随机”值。
Random r = new Random();
答案 1 :(得分:0)
我不知道您到底想用for做些什么。 但这只会执行6次:
public static void main(String[] args) {
int result = 0;
for (int i = 0; i < 6; i++) {
result = 1 + (int)(6 * Math.random());
if (result == 6) {
System.out.println(" Player A is winner " + result);
JOptionPane.showMessageDialog(null, " SPELARE 1 VINNER ");
} else { //the second if was redundant
System.out.println(" Player B and A are loosing " + result);
}
}
}
有Math.Random()和Random类。随机类会做到这一点
Random rand = new Random();
int value = rand.nextInt(6)+1; //0..5 + 1 = 1..6
在第一个代码示例中可以看到Math.Random()
答案 2 :(得分:-2)
随机类和数字非常“神秘”,因为您无法预测其生成顺序。这是因为随机数是由设备的时钟值生成的。
如官方文件所述
public Random()创建一个新的随机数生成器。这个 构造函数将随机数生成器的种子设置为一个值 很可能与对此的任何其他调用不同 构造函数。
因此,在可能的较小数字序列中,基于毫秒的较小差异可以多次生成相同的值。相反,在每个周期上对其进行实例化会使数字始终是随机的。
我多次遇到这个问题,并通过实例化循环中的Random对象解决了该问题。
public class Devoir9 {
public static void main(String[] args) {
int result = 0;
for (int i = 0; i < 6; i++) {
Random r = new Random(); //move into the for removing the seed
result = r.nextInt(6); //generate random number between 0 and 6 (excluded)
result++; //make result get value from 1 to 6 (inclused)
// System.out.println(" you rolled :" + result);
if (result == 6) {
System.out.println(" Player A is winner " + result);
JOptionPane.showMessageDialog(null, " SPELARE 1 VINNER ");
} else { //else if is useless because every other random number will be not == 6
System.out.println(" Player B and A are loosing " + result);
}
}
}
}
只需除去构造函数中的种子即可。但是对于小范围内的许多循环,我总是得到相同的生成数。
在我看来,虽然它不是最专业的解决方案,但我还是推荐解决方案1。