2

このプロジェクトは 6 面のサイコロを転がし、90% の確率で 6 に、2% の確率で 1-5 に着地させたいと考えています。

これがメインクラスの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;
}

}

これは、ダイのロール メソッドをオーバーライドして、ダイを正しい値にロードする必要があるサブクラスです。

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 ~ 6 ではなく 1 ~ 100 の乱数にマッピングすると、非常に簡単になります。

免責事項:私は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 に答える