Javaでは、乱数を入れることができます:
import java.util.Random;
私はゲームを開発しており、ゲームのランダマイザーに不可欠です。しかし、それは私にとって数字を高速に変更し、新しいランダム化された数字に変更する時間が本当に好きでした. それ、どうやったら出来るの?私はグーグルで検索しようとしましたが、何もくれませんでした。
おそらくあなたはそれがどのように機能するかを誤解していると思います。たとえば、電話をかけると、電話random.nextInt(10);
をかけるたびに異なる番号が返されます。それは「常に変化している」わけではなく、一連の数字を生成し、いつこれを行うかを制御できます。要求されるまで、新しい番号は生成されません。
nextInt()
などの呼び出しの間に保存したい場合は、変数に割り当てることができます。
とを使用Timer
して、TimerTask
次のように一定の間隔で乱数を生成できます。
public class MyRandomNumberGenerator extends TimerTask{
int ramdomNumber =0;
Random r = new Random();
@Override
public void run() {
// TODO Auto-generated method stub
randomNumber = r.nextInt(10);
//Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive) here it is 10,
}
public int getRandomNumber(){
return randomNumber;
}
}
乱数を使用したいメインクラスになりました
このコードを使用する
MyRandomNumberGenerator rng = new MyRandomNUmberGenerator();
Timer t = new Timer();
t.schedule(rng,System.getCurrentTimeMillis,10000);
int r = rng.getRandomNumber();
これは、今System.getCurrentTimeMillis
からタイマーを開始することを10000
意味し、ミリ秒ごとに新しい乱数が作成されてインスタンス変数に格納され、クラスのメソッドを10000
使用してその乱数にアクセスできることを意味します。getRandomNumber
MyRandomNumberGenerator
グーグルはあなたに何も与えなかったのですか?私はそれを非常に疑っています。
public class Game {
private Random random = new Random(System.currentTimeMillis());
// Generate all the random numbers you need.
}
予定通りに電話する必要があるTimer
場合は、アラームが鳴ったときに次の番号にのみ電話をかけるように使用します。
public static void main(String[] args) throws Exception {
Random random = new Random(System.currentTimeMillis());
for (int i = 0; i < 10; i++) {
int number = random.nextInt(10);
System.out.println("number: " + number);
// sleep 1s every generation
TimeUnit.SECONDS.sleep(1);
}
}
オブジェクトで呼び出すメソッドは、呼び出すRandom
たびに新しい乱数を返します。それが望ましくない場合は、 のインスタンスを保持する独自のクラスを作成しRandom
、新しい乱数を取得するために最後に呼び出したのはいつかをチェックします。新しいものを交換する時期であれば、新しいものを返却してください。このようなもの:
class TimedRandom {
private final Random random = new Random();
private int lastNumber;
private long lastRefreshTime;
public int getNumber() {
long now = System.currentTimeMillis();
// If it's more than 2 seconds ago, generate a new random number
if (now - lastRefreshTime > 2000L) {
lastNumber = random.nextInt();
}
lastRefreshTime = now;
return lastNumber;
}
}