• 締切済み

Randomクラスについて

Random rand = new Random(); int random = rand.nextInt() % 7; 上記のようにランダムクラスのインスタンスを作成し 0~7までの均等な値をfor文を使って得たいのですが、 なぜかrandomの中にマイナスの値が入ってしまいます。 なぜでしょうか?あるいはこれ以外に回避できる方法は ありますか?

みんなの回答

  • syunpon
  • ベストアンサー率42% (9/21)
回答No.4

ありゃ?出来ませんでしたか? 一応、私の環境で実験してみましたんですけど、特に問題無かったんですが。。 ちなみに私はJDK1.3でDOSプロンプトからコンパイル&実行です。 一応簡単なサンプルを載せておきますね import java.util.Random; class RandomPrint { public static void main(String args[]) { Random rand = new Random(); for ( int i = 0; i <10; i++){ int random = rand.nextInt(8); System.out.println(random); } } } ちなみに前に記したURLはJDK1.2のクラスライブラリの仕様なので、 それより前のバージョンのJDKだとどうなのかはわかりません。。(^^; 説明書きによるとJDK1.0からの導入らしいので大丈夫だとは思うのですけど。。 もしかして、int random = rand.nextInt(8);の部分を int random = rand.nextInt( 0, 8);とかしてません? でも、これだと「シンボルを解釈実行出来ません」ってエラーになるんですよね。。。(^^;

cyan1110
質問者

お礼

親切にありがとうございました。 とりあえず、今度はJ++を使わないで、参考プログラムを試してみたいと思います。

すると、全ての回答が全文表示されます。
  • syunpon
  • ベストアンサー率42% (9/21)
回答No.3

ランダムクラスなのですが、nextIntメソッドで0から指定された範囲の一様分布のint型の擬似乱数を返しますので、 質問のような場合は、 int random = rand.nextInt(8); で0~7の擬似乱数が得られますよ 詳しくは、下記参照URL:Sunのクラスライブラリ仕様書参照して下さい インデックス欄をクリック後Rの項目クリックしてスクロールしていけば Randomクラスについて詳しく書かれてあります。

参考URL:
http://www.javasoft.com/products/jdk/1.2/ja/docs/ja/api/index.html
cyan1110
質問者

補足

nextInt()の()の中に数値を入れると引数が多すぎると出ます。リファレンスマニュアルを見ても引数の指定はありませんでした。syunponさんの参考URLで調べてみます。ありがとうございました。

すると、全ての回答が全文表示されます。
  • kokucho81
  • ベストアンサー率61% (157/255)
回答No.2

同じ数字が、近い間できるだけに出ないように するためには、適当におもみ付けをつけて、 同じ数字ははじいてしまえば良いような気がします。 (ゲーム開発の現場などで一見ランダムと見せかけて  本当は裏で工作するときによく使う手法です) 例えば、以下の2つの判定をするだけでも、有効です。 (1)8つのキュー配列を用意し、ランダム値を一回だす  ごとに、このキュー配列に数字を入れます。  そして、新たに数字を振るときに、8つのキュー配列  中にすでに1回その数字がでていれば、30%の確率  で振りなおし、2回その数字が出ていれば、50%の  確率で振りなおす。  長期的に見た場合のランダムを期待するだけではなく、  短期的にもランダムであることを意図的に仕向けるわ  けですね。  %のところは重みづけです。  ご自由にお考え下さい。

すると、全ての回答が全文表示されます。
noname#9414
noname#9414
回答No.1

マイナスの値が入らないようにしたいのであれば、 単純に、絶対値に変換してから7で割ってはダメ なのでしょうか。 ではでは☆

cyan1110
質問者

補足

試してみたのですが、7回中、同じ値が数回現れます。J++のバグでしょうかね~。

すると、全ての回答が全文表示されます。