-PR-
締切済み

Randomクラスについて

  • 困ってます
  • 質問No.21646
  • 閲覧数650
  • ありがとう数12
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 44% (35/79)

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

上記のようにランダムクラスのインスタンスを作成し
0~7までの均等な値をfor文を使って得たいのですが、
なぜかrandomの中にマイナスの値が入ってしまいます。
なぜでしょうか?あるいはこれ以外に回避できる方法は
ありますか?
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.1

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

ではでは☆
補足コメント
cyan1110

お礼率 44% (35/79)

試してみたのですが、7回中、同じ値が数回現れます。J++のバグでしょうかね~。
投稿日時 - 2000-12-24 23:27:42


  • 回答No.2
レベル11

ベストアンサー率 61% (157/255)

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

ベストアンサー率 42% (9/21)

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

お礼率 44% (35/79)

nextInt()の()の中に数値を入れると引数が多すぎると出ます。リファレンスマニュアルを見ても引数の指定はありませんでした。syunponさんの参考URLで調べてみます。ありがとうございました。
投稿日時 - 2000-12-25 20:36:03
  • 回答No.4
レベル7

ベストアンサー率 42% (9/21)

ありゃ?出来ませんでしたか?
一応、私の環境で実験してみましたんですけど、特に問題無かったんですが。。
ちなみに私は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

お礼率 44% (35/79)

親切にありがとうございました。
とりあえず、今度はJ++を使わないで、参考プログラムを試してみたいと思います。
投稿日時 - 2000-12-26 21:52:13
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ