在Java中为猜谜游戏获取新的随机数

在Java中为猜谜游戏获取新的随机数,java,class,random,Java,Class,Random,我正在为Java构建一个游戏,我已经开始着手最后一部分。还有其他一些问题需要解决,这些问题很容易解决。尽管有一个问题我无法解决,那就是每次我运行游戏后,我都无法得到新的随机数 例如,如果没有人从数字(1-20)中猜出计算机随机生成的数字,游戏就会重复。在此期间,您正在玩两台计算机,它们的数字也是随机组成的(同样是1-20个值) 下面是我制作的Player类的一些代码 import java.util.Scanner; import java.util.Random; public class

我正在为Java构建一个游戏,我已经开始着手最后一部分。还有其他一些问题需要解决,这些问题很容易解决。尽管有一个问题我无法解决,那就是每次我运行游戏后,我都无法得到新的随机数

例如,如果没有人从数字(1-20)中猜出计算机随机生成的数字,游戏就会重复。在此期间,您正在玩两台计算机,它们的数字也是随机组成的(同样是1-20个值)

下面是我制作的Player类的一些代码

import java.util.Scanner;
import java.util.Random;

public class Player {
    private double currentGuess = 0;
    private String firstName;
    private boolean isCorrect;
    Scanner myScanner = new Scanner(System.in);

public Player() {
}

public double autoGuess()   {
    Random randomNumber = new Random();
    double number = randomNumber.nextInt(20) + 1;

    return number;
}
这是我的猜谜类,这是实际发生动作的地方。我不明白为什么当我调用autoGuess方法(从玩家类)时,我不能在每次游戏后得到新的随机数,这导致没有人猜到正确的数字。随机生成要猜的数字(赢的数字)也是一样,每次新游戏后仍然保持不变。下面是我的猜谜游戏类的一些代码

import java.util.Random;

public class GuessGame {
    Player player1 = new Player();
    Player player2 = new Player();
    Player player3 = new Player();

    double player2Guess = player2.autoGuess();
    double player3Guess = player3.autoGuess();
    int numberOfTries = 0;

public double generateWinningNumber()   {
    Random randomGenerate = new Random();
    double randomNumber = randomGenerate.nextInt(20) + 1;

    return randomNumber;
}

private final double WINNING_NUMBER = generateWinningNumber();

public void startGame() {
    System.out.println("VM: Welcome we are going to play a number guessing game. I'm (the JVM)\n"
            + "going to randomly pick a number between 0 and 20. You and the 2 other\n"
            + "computer-generated players are going to try to guess that number. The game\n"
            + "will end when at least one of the players correctly guesses the number.\n");

    System.out.println(WINNING_NUMBER);

    System.out.print("What is your name?  ");
        String player1Name = player1.readName();

    while (player1.isCorrect() == false)    
        {

        System.out.print(player1Name + ", enter your guess:  ");
            player1.readGuess();
            player2.autoGuess();
            player3.autoGuess();

            numberOfTries++;

            if (player1.getCurrentGuess() == WINNING_NUMBER || player2Guess == WINNING_NUMBER || player3Guess == WINNING_NUMBER)
            {
                player1.setCorrect(true);
                displayGuesses();
                determineWinner();
            }

            else
            {
                displayGuesses();
                displayHints();
                System.out.println("No one guessed the number.\nPlayers will need to guess again.\n");
                System.out.println("The winning number was: " + WINNING_NUMBER);
                generateWinningNumber();
            }
        }   
}


public void displayGuesses()    {
    System.out.print("Player 2's guess is: " + player2Guess + "\n");
    System.out.print("Player 3's guess is: " + player3Guess + "\n\n");
}

还有更多的问题要解决,显然还有更多的问题要解决,但我正试图解决这个问题。我有我的司机类开始这个游戏,也知道我需要四舍五入我的数字整数,所以没有小数点。此外,所有提示方法所指的都是告诉您是热的、热的还是冷的just if语句。运行得很好。只是需要一些帮助,以了解如何在每次新的不成功游戏之后从我的while语句中获取一个新的随机数。

您的
generateWinningNumber()
方法返回一个double,实际上它本身不会更改任何值。另外,因为中奖号码是一个常数,即使你真的想改变它,你也无法改变。您绝对不应该将
WINNING\u NUMBER
设为final,或者修改
generateWinningNumber()
以修改全局变量本身,或者保持原样并使用其返回值分配给非常量
winningNumber
全局。

…并创建随机()要添加Mike所说的内容,您的autoGuess()还将返回一个double,并且不会更改任何值。函数不应该以双精度形式返回变量号,而应该将currentGuess设置为变量号并返回void。@LeedianelCrocker不是已经返回了吗?随机对象是用不同的方法创建的,因此它们永远不会被重用。太好了!非常感谢你!抱歉,如果格式不是很好或其他什么;“我正在努力做得更好。”迈克,这是我的观点。Random()对象应该被重用,而不是重新创建,否则将无法获得良好的随机分布。