在两个玩家之间创建骰子程序

时间:2018-10-23 13:39:51

标签: java

我写了这段代码。问题在于玩家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);    
            }     
        }
    }
}

3 个答案:

答案 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()创建一个新的随机数生成器。这个   构造函数将随机数生成器的种子设置为一个值   很可能与对此的任何其他调用不同   构造函数。

因此,在可能的较小数字序列中,基于毫秒的较小差异可以多次生成相同的值。相反,在每个周期上对其进行实例化会使数字始终是随机的。

解决方案1:

我多次遇到这个问题,并通过实例化循环中的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);    
            }     
        }
    }
}

解决方案2:

只需除去构造函数中的种子即可。但是对于小范围内的许多循环,我总是得到相同的生成数。

在我看来,虽然它不是最专业的解决方案,但我还是推荐解决方案1。