dポイントプレゼントキャンペーン実施中!

Random rand = new Random();
int random = rand.nextInt() % 7;

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

A 回答 (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);とかしてません?
でも、これだと「シンボルを解釈実行出来ません」ってエラーになるんですよね。。。(^^;
    • good
    • 0
この回答へのお礼

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

お礼日時:2000/12/26 21:52

ランダムクラスなのですが、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 …

この回答への補足

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

補足日時:2000/12/25 20:36
    • good
    • 0

同じ数字が、近い間できるだけに出ないように


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

マイナスの値が入らないようにしたいのであれば、


単純に、絶対値に変換してから7で割ってはダメ
なのでしょうか。

ではでは☆

この回答への補足

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

補足日時:2000/12/24 23:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!