質問: rand.nextInt() % 7; 上記のようにランダムクラスのインスタンスを作成し 0~7までの均等な値をfor文を使って得たいのですが、 なぜかrandomの中にマイナスの値が入ってしまいます。 なぜでしょうか?あるいはこれ以外に回避できる方法は ありますか?
回答: 同じ数字が、近い間できるだけに出ないように するためには、適当におもみ付けをつけて、 同じ数字ははじいてしまえば良いような気がします。 (ゲーム開発の現場などで一見ランダムと見せかけて 本当は裏で工作するときによく使う手法です) 例えば、以下の2つの判定をするだけでも、有効です。 (1)8つのキュー配列を用意し、ランダム値を一回だす ごとに、このキュー配列に数字を入れます。 そして、新たに数字を振るときに、8つのキュー配列 中にすでに1回その数字がでていれば、30%の確率 で振りなおし、2回その数字が出ていれば、50%の 確率で振りなおす。 長期的に見た場合のランダムを期待するだけではなく、 短期的にもランダムであることを意図的に仕向けるわ けですね。 %のところは重みづけです。 ご自由にお考え下さい。