Java Random()不生成随机数

Java Random()不生成随机数,java,random,Java,Random,我正在尝试使用roshambo(或石头-布-剪刀),让计算机输出石头、布或剪刀来代替0到2之间的随机值。但是,我没有得到随机值。当程序运行时,它会经历一个while循环,并且每次它通过该循环时,值都保持不变。但是,如果我停止,然后重新运行应用程序,则该值会更改,并在循环期间保持该值不变。我是否正确地编码了这个方法 public class Player2 extends Player{ private Random rand; public Player2(){

我正在尝试使用roshambo(或石头-布-剪刀),让计算机输出石头、布或剪刀来代替0到2之间的随机值。但是,我没有得到随机值。当程序运行时,它会经历一个while循环,并且每次它通过该循环时,值都保持不变。但是,如果我停止,然后重新运行应用程序,则该值会更改,并在循环期间保持该值不变。我是否正确地编码了这个方法

public class Player2 extends Player{

    private Random rand;

    public Player2(){
        rand = new Random();
    }

    public Roshambo generateRoshambo() {
        int min = 0;
        int max = 2;
        int randomNum = rand.nextInt(max - min + 1) + min;

        if(randomNum == 0){
            return Roshambo.ROCK;
        } else if (randomNum == 1) {
            return Roshambo.PAPER;
        } else {
            return Roshambo.SCISSORS;
        }
    }
}
以下是循环:

Roshambo value = p2.generateRoshambo(); 
String cont = "Yes";

do{

        System.out.print("\nRock, Paper, or Scissors: ");
        String choice = sc.nextLine();


        System.out.println("\n" + name + ": " + choice);
        System.out.println("Computer: " + value);

        if (value == ...)
        {
            System.out.println("\n" + name + " Wins!\n");
        } 

        else if (value == ...)
        {
            System.out.println("\nYou Tied!\n");
        }

        else 
        {
            System.out.println("\nThe Computer Wins!\n");
        }

        System.out.print("Play again? (Yes/No): ");
        cont = sc.nextLine();
    } while (cont.equalsIgnoreCase("Yes"));

该症状最可能的原因是每次都创建一个新的随机实例。默认种子基于可能没有在紧密循环中滴答作响的时钟。重要的是尽可能少地创建随机实例,通常在程序中只创建一个,然后继续从中获取值。

我刚刚意识到我自己的错误。我在do-while循环之外调用了p2.generateRoshambo()。通过在我的循环中加入以下内容,我能够解决问题:

Roshambo value = p2.generateRoshambo()

可以显示while循环吗?首先,int randomNum=rand.nextInt(max);正确的方法是什么way@DmitryKvochkin只有在这个特定的例子中,它仍然是rand.nextInt(max+1),因为他需要3个值。-min+min部分是一个带有0的noop,因此它不会改变任何东西。使用
rand.nextInt(3)
可以有3个可能的值。您可以在括号外添加
+1
,以获得从1到3的值,而不是从0到2的值。除非你的
min
max
以后会用到,否则你不应该让它变得比需要的更复杂。除非他每次都在创建一个新的
Player2
,否则这不是答案。对于这类问题,最好确保你的示例代码确实产生了bug,发布虚构/未经测试的代码会使帮助变得更加困难。