-PR-
締切り
済み

Randomクラスについて

  • 困ってます
  • 質問No.21646
  • 閲覧数640
  • ありがとう数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で割ってはダメ なのでしょうか。 ではでは☆ ...続きを読む
マイナスの値が入らないようにしたいのであれば、
単純に、絶対値に変換してから7で割ってはダメ
なのでしょうか。

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

お礼率 44% (35/79)

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


  • 回答No.2
レベル11

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

同じ数字が、近い間できるだけに出ないように するためには、適当におもみ付けをつけて、 同じ数字ははじいてしまえば良いような気がします。 (ゲーム開発の現場などで一見ランダムと見せかけて  本当は裏で工作するときによく使う手法です) 例えば、以下の2つの判定をするだけでも、有効です。 (1)8つのキュー配列を用意し、ランダム値を一回だす  ごとに、このキュー配列に数字を入れます。  そして、 ...続きを読む
同じ数字が、近い間できるだけに出ないように
するためには、適当におもみ付けをつけて、
同じ数字ははじいてしまえば良いような気がします。
(ゲーム開発の現場などで一見ランダムと見せかけて
 本当は裏で工作するときによく使う手法です)
例えば、以下の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クラスにつ ...続きを読む
ランダムクラスなのですが、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[]) { R ...続きを読む
ありゃ?出来ませんでしたか?
一応、私の環境で実験してみましたんですけど、特に問題無かったんですが。。
ちなみに私は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で解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ