[英]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.