2017-11-10 14 views
-1

私はかなりJavaに慣れていて、クラスで干渉し始めました。私は現在、作成している基本的なゲームでサイコロをシミュレートしようとしています。サイコロはうまくいくようですが、それ以降は数字が常に変わらないので、サイコロを1回だけ効果的に呼び出すことができます。私がそれを呼び出すたびに異なるように私が作成したダイスのための簡単なソリューションはありますか?毎回新しい乱数を取得する[Dice Simulator]

public class Dice { 
    Random randomNum = new Random(); 

    public int diceRoll() { 
    int diceResult = 0; 
    int result = randomNum.nextInt(20) + 1; 
    diceResult = diceResult + result; 
    return diceResult; 
    } 
} 

わずかで任意の助けに感謝、あなたに

編集に感謝:フィードバックみんなをありがとうございました。私のコードでは、整数に使用した元のランダムな値を呼び出していたことが判明しました。その値を呼び出したたびに新しい値に変更しなかったためです。

ダイスのクラスそのものではありませんでした。感謝します! :)

+1

[Javaで一意の乱数を生成する](https://stackoverflow.com/questions/8115722/generating-unique-random-numbers-in-java) – Stefan

+0

のコードは表示されません_always_は同じ番号を生成するので、_might_はいくつかの数が複数のものより生成され、さらには 'nextInt'に与えられた範囲のために頻繁に発生します。 –

+2

問題を再現できません。 diceRoll関数の呼び出しはすべて期待どおりに動作します(1から20までの乱数を返します)。 –

答えて

0

あなたのコードを試して、うまく動作します。

import java.util.Random; 
    public class Main { 
     Random randomNum = new Random(); 
     public static void main(String[] args) throws Exception { 
      Main main = new Main(); 
      for (int i =0; i<20; i++) { 
       System.out.println(main.diceRoll()); 
      } 
     } 

     public int diceRoll() 
     { 
      int diceResult = 0; 
      int result = randomNum.nextInt(20) + 1; 
      diceResult = diceResult + result; 
      return diceResult; 
     } 
    } 

O/P

8 
5 
3 
15 
2 
15 
16 
11 
9 
11 
2 
7 
14 
3 
3 
16 
5 
11 
18 
13 

あなたがOを共有してくださいすることができ/ P

0

は、あなたがそうのようなあなたのメソッド内でランダムなオブジェクトをインスタンス化しようとしたことがありますか?

public class Dice { 


    public int diceRoll() { 
    Random randomNum = new Random(); 
    int diceResult = 0; 
    int result = randomNum.nextInt(20) + 1; 
    diceResult = diceResult + result; 
    return diceResult; 
    } 
} 

ランダムクラスは、疑似ランダムであり、インスタンス化の時点で日付によって設定されます。あなたは確かにC#でより良いランダム値を得るでしょう。これは、これを行かせる価値があります。

0

フィードバックをいただきありがとうございます。私のコードでは、整数に使用した元のランダムな値を呼び出していたことが判明しました。その値を呼び出したたびに新しい値に変更しなかったためです。

ダイスのクラスそのものではありませんでした。感謝します! :)

関連する問題