6

私は、nSides側で数のサイコロを振った結果の合計を返すメソッドrollDice(int number、int nSides)を書き込もうとしています。

したがって、たとえば、rollDice(3、6)は、3つの6面サイコロを振った結果を返す必要があります(3から18までの数字を加算)。

以下のメソッドは、1を入力すると負の数を返しますint number。これを修正するには、何をする必要がありますか?

public static  int rollDice(int number, int nSides) {
    int num = 0;
      if(nSides >=3)
    {
      for(int i = 0; i < number; i++){
       Random  r = new Random(); 
       int roll = r.nextInt();
       num = num + (roll % nSides)+1;

      }
    }
      else{
          System.out.println("Error num needs to be from 3");

    }
    return num; 
} 
4

5 に答える 5

13

Random.nextInt()予測できない動作があります。負の数を含め、整数で可能なすべての値を生成できます。代わりに使用Random.nextInt(numSides)してください-[0、numSides)から整数を返します。つまり、0を含み、numSidesを除外します。必要な機能を取得するには[1、numSides]を使用します

r.nextInt(numSides)+1;

詳細については、こちらをご覧ください。

于 2012-10-12T13:46:43.703 に答える
5

Random r初期化する必要があるint rollのは1回だけなので、ループから削除しました。nextInt(int)メソッドは、0からintを含むがintを含まない整数を選択します。これは、0(包括的)からint(排他的)として知られているため、ダイまでの範囲を調整するには1を追加する必要があります。なぜ%を使用したのかはわかりませんが、ご存知のようです。*を使用して乗算すると、すべてのサイコロに同じ数が与えられますが、これはあなたがやろうとは思わないことです。クラスの可能な実装の1つは次のとおりです。

import java.util.Random;

public class Dice {

    public static  int rollDice(int number, int nSides)
    { 
        int num = 0;
        int roll = 0;
        Random  r = new Random(); 
        if(nSides >=3) 
        { 
            for(int i = 0; i < number; i++)
            { 
                roll = r.nextInt(nSides)+1;
                System.out.println("Roll is:  "+roll);
                num = num + roll; 
            } 
        } 
        else
        { 
            System.out.println("Error num needs to be from 3"); 
        } 
        return num;  
    } 

    public static void main(String[] args)
    {
        System.out.println("Total is: "+rollDice(3, 6));
    }
}
/*
Roll is:  4
Roll is:  1
Roll is:  2
Total is: 7
*/
于 2012-10-12T14:00:03.253 に答える
2


int roll = r.nextInt();
に置き換える

int roll = r.nextInt(nSides);

于 2012-10-12T13:49:30.787 に答える
0

負の数で使用する%と、負の数になります。

この場合、解決策は簡単です。

int roll = r.nextInt(nSides) + 1; // 1 to nSizes
num += roll;
于 2012-10-12T13:45:10.620 に答える
0

これをrollDiceメソッドとして使用するのはどうですか。

public static int rollDice(int number, int nSides) {
    int count = 0;
    for(int i = 0; i < number; i++) {
        count += (int)(Math.random() * nSides) + 1;
    }
    return count;
}
于 2012-10-12T13:47:13.813 に答える