簡體   English   中英

Random()不生成隨機數

[英]Random() not generating random number

我正在嘗試使用roshambo(或Rock-Paper-Scissors),並讓計算機輸出Rock,Paper或Scissors來代替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()

症狀的最可能原因是每次都創建一個新的Random實例。 默認種子基於可能未在嚴格循環中滴答的時鍾。 重要的是,創建盡可能少的Random實例(通常在程序中只有一個實例),然后繼續從中獲取值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM