2

这个项目正在滚动一个 6 面骰子,并希望它在 6 90% 的时间和其他 1-5 2% 的时间降落。

这是主类 Die

public class Die
 {
//----------------------------------------------------------------------------------
// Instance Variables
//----------------------------------------------------------------------------------
protected int numSides;
protected Random myRandomNumGenerator;



//----------------------------------------------------------------------------------
//Constructors
//----------------------------------------------------------------------------------
/** 
 * Default constructor creates a 6-sided die.
 */
public Die()
{
    numSides = 6;
    myRandomNumGenerator = new Random();
}


/** 
 * This constructor takes in a single integer value and create a die with
 * that number of sides.
 * 
 * @param aNumSides Number of sides to create on the die.
 */
public Die(int aNumSides){
    numSides = aNumSides;
    myRandomNumGenerator = new Random();
}





//----------------------------------------------------------------------------------
//Class Methods
//----------------------------------------------------------------------------------
/** 
 * Getter for the number of sides on the die.
 * 
 * @return The number of sides on the die.
 */
public int getNumOfSides() 
{
    return numSides;
}


/** 
 * Rolls the die to get a random value.
 * 
 * @return A random value between 1 and the number of sides.
 */
public int roll() 
{
    return myRandomNumGenerator.nextInt(numSides) + 1;
}

}

这是我需要覆盖 die 中的 roll 方法以将 die 加载到正确值的子类。

import java.util.Random;

public class LoadedDie extends Die{

protected double loadedPercentage;
protected int numSides;
protected int loadedValue;
protected Random ranNumGenerator; 


public LoadedDie() {
    loadedValue = 6;
    loadedPercentage = .9;



}

public LoadedDie(int aNumSides, int aLoadedValue, double aLoadedPercentage) {
    numSides = aNumSides;
    loadedValue = aLoadedValue;
    loadedPercentage = aLoadedPercentage;




}
public int roll() {

    return ranNumGenerator.nextInt(numSides)+1;




        }



}

我还没有弄清楚如何使随机数比其他人更频繁地出现。谢谢

4

3 回答 3

3

您的要求重新措辞:

6 90% 的时间

5 2%

4 2%

3 2%

2 2%

1 2%

因此,将其映射为 1-100 而不是 1-6 的随机数,这非常简单:

免责声明:我不是 Java 人,无法验证它是否有效,可以更有效地编写等,但它明白了这一点

int result = ranNumGenerator.nextInt(100);
if(result < 10) return (result % 5) + 1;
return 6;
于 2013-10-17T02:52:24.380 回答
1

尝试 1 到 50 之间的范围。

最小随机值,min = 1

最大随机值,最大值 = 50

 int min = 1;
 int max = 50;
 int randomValue = min + (int)(Math.random()*((max-min) + 1));
 int diceValue = (randomValue < 6) ? randomValue : 6;

1 到 5 之间每个数字出现的概率:2%

6的发生概率:90%

于 2013-10-17T03:00:32.733 回答
0

你可以试试这个

使用 Math.random() 生成 0 到 9 之间的随机数。然后只需检查随机数的结果,如果生成的随机数是:

0 --> 骰子是 1/2/3/4/5

1-9 --> 骰子是 6

在这里,骰子面 6 以 90% 的机会出现,其余面以 10% 的机会出现。为了进一步让骰子面 1、2、3、4、5 各有 2% 的机会,您可以使用 Math.random() 再次执行相同的操作,然后再次检查。

int randomNo = (int) Math.random() * 10 //Math.random returns double so need to convert to integer
if(randomNo > 0){
    //dice is 6
}else{
    randomNo = (int) Math.random() * 10
    if(randomNo < 2) //show dice 1
    else if(randomNo < 4) //show dice 2
    else if(randomNo < 6) //show dice 3
    else if(randomNo < 8) //show dice 4
    else if(randomNo < 10) //show dice 5
}
于 2013-10-17T02:57:33.993 回答