• ベストアンサー

乱数の桁数指定、または範囲指定。

こんにちは。javaで乱数を発生させる場合に Math.randomというメソッドを使用しているのですが、 桁数指定とかって可能なのでしょうか? (例)2桁の数値のみをランダムに発生させる等 1桁、3桁は不可。 また、範囲の指定など可能なのでしょうか? (例) 25から70までの範囲でランダムに発生させる。 わかる方、教えていただけると幸いですm(_ _)m よろしくお願い致します。

  • Java
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.3

n ≦ i ≦ m のように n 以上 m 以下のランダムな整数 i を取得したい場合 random() 関数は 0 ≦ x < 1 の数字を返しますので 下記の式で得られます。 i = Math.floor(Math.random() * (m - n + 1)) + n ; ランダムとして剰余を使うこともありますが、擬似乱数を線形合同法にて算出している場合、剰余だと系列が偏る可能性があります。 あと、一定の数が出るまでループするというのは、不要なループを繰り返す場合がありますので、すこしもったいない感じがしますね。

その他の回答 (2)

  • shinjif
  • ベストアンサー率33% (30/90)
回答No.2

多分そういうのはないと思います。 今JavaのAPIドキュメントを持っていませんが、基本的にそういうのは現在使用されているJavaのJDKのバージョンに合ったAPIドキュメントを見ましょう。 ただ、たとえば3桁以内(0~999)の乱数が欲しいなら、取得した乱数を1000で割った余りを使用すればいいだけです。 (例)2桁の数値のみをランダムに発生させる等 取得した乱数を90で割り、あまりに10を加算する、ではどうでしょうか? (例) 25から70までの範囲でランダムに発生させる。 この場合は、71で割った余りを使用する。余りが25未満の場合は、25以上になるまで繰り返す。 というのではいかが。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

JAVAは詳しくないので考え方だけ。 2桁(0~19)  int(random*20) 2桁(1~20)  int(random*20)+1 2桁(25から70)int(random*45)+26 違ってたらごめんなさい。

関連するQ&A

  • 指定した範囲の乱数がダブらない方法

    指定した範囲の数値から乱数を発生させ、指定した個数を取り出す。 数値はダブらない。

  • 乱数について

    MathクラスのRandomメソッドを使用して、hairetu[i] = (int)(Math.random() * 100);のように乱数を取得しているのですが、このMath.randomについても、平均を取ると大体、真ん中の50になる等の特徴があるかもしれません。一様乱数と標準正規乱数が関係するのでしょうか?この2つの違いについて教えてください(^^;

    • ベストアンサー
    • Java
  • 乱数について

    javaで使用可能な乱数にはMath.random()などがあります。その他にもあると思うのですが、なぜ一つの関数だけでないのですか?Math.random()にはなにか周期性や特徴みたいなものはあるのでしょうか?

    • ベストアンサー
    • Java
  • java プログラム 範囲を指定した乱数

    正規乱数をボックスミューらー法で発生させて、 範囲を指定して出力したいと思ってます。 プログラムを作成してみたのですが・・・ 平均50で範囲を48から52にしたいのですが たまに範囲外というか「0.0」が出力されてしまいます。 アドバイスをください import java.util.*; public class test2{ public static void main(String args[]){ double R,S; double r[]=new double[200];  double s[]=new double[200]; double s1[]=new double[200]; Random ran=new Random();    for(int i=0;i<200;i++){     R=ran.nextDouble(); S=50+Math.sqrt(-2*Math.log(ran.nextDouble()))*Math.cos(2*Math.PI*(ran.nextDouble())); r[i]=R; s1[i]=S; if(50-2<s1[i]){ if(50+2>s1[i]){ s[i]=s1[i]; } } } for(int j=0;j<150;j++){ System.out.println(s[j]); } } } お願いします

    • ベストアンサー
    • Java
  • 乱数の取得について

    androidアプリの開発で乱数を取得してその中の例えば1桁目と二桁目の数値をそれぞれ取得したい場合はどうすればいいですか? [例] 123456→123400 と56に分離させる 乱数の取得は下記のコードで取得しています Random aaa = new Random(); bbb = aaa.nextInt(200000); よろしくお願い致します。

    • ベストアンサー
    • Java
  • エクセル関数で桁数指定し数値を比較したいが

    エクセル関数で桁数指定などあるのでしょうか? 例えば 桁数を指定し一致した数値を取り出したいが・・どうすればよいでしょうか? 桁数は1桁~6桁です。 「例」123456の数字があります。 6桁全て一致したら○ 下5桁一致したら○ 下4桁一致したら○ 下3桁一致したら○ ・・・・と言う具合にエクセルで組みたいのです。よろしくお願いします。

  • javaの乱数生成プログラム-バグを教えてください

    こんにちは。Web上で「重複しない乱数」を作るプログラムをいくつか見まして、どれもこれも何でこんな複雑なステップを踏むのであろう思い、どーだこんなに簡単に作れるじゃん・・・と0-9までの整数で乱数を生成するプログラムを書いてみたんです。これならAPI調べなくたって基本を身につけていれば誰でも書けると・・・けど、生成する乱数の数が100個とか200個とかなら問題ないんですが、例えば9桁の乱数を10000個作るように設定しても7500個くらいしかListに入りません。原因がどこにあるかお教えいただけますでしょうか。なにとぞよろしくお願いします。 import java.util.ArrayList; import java.util.List; public class RandomExec { static int idLength=9; //乱数の桁数を指定 static int elmSize=100; //生成する乱数の個数を指定 static List<String> list = new ArrayList<String>(); //乱数を格納するリスト public static void main(String[] args) { addList(); //生成された乱数を要素に持つリスト list を取得 //要素をひとつずつコンソール出力 for(String s : list){ System.out.println(s); } } //リストに入れるための乱数を生成するメソッド public static String addId(){ int[] id=new int[idLength]; //int配列idを宣言(要素数=乱数の桁数) String s=""; String str; //配列にMath.random()で取得した要素を入れる for(int i=0; i<idLength; i++){ int n=(int)(Math.random()*10); id[i]=n; } //指定した桁数(この場合は9個)の数字から成るString s を得るため //int型配列idの要素をStringに変換し、すべての要素を連結する for(int n : id){ str = String.valueOf(n); s+=str; } return s; //生成されたStringを返す(下のaddList()メソッドに返しています) } //addIdメソッドで作った要素候補をチェックし、重複がなければListに加えるメソッド //List list の要素数が変数elmSizeで指定した乱数の数と同じになるまで繰り返す public static void addList(){ while(list.size()<elmSize){ //addIdメソッドでlistの要素候補strを取得 String str = addId(); //listに候補と同じ文字列を持つ要素が存在しなければlistに加える if(!list.contains(str)) list.add(str); } } }

    • ベストアンサー
    • Java
  • 乱数の生成について

    Javaの本を購入し、演習を行いましたが思った以上に理解できませんでした。 例題と演習を記入いたしますので、どなたかご教示くだされば幸いです。 ちなみにですが、本は初心者向けで例題のみで解けるものと思われます。 【例題1】0~9の数値を乱数で生成して表示 import java.util.Random; public class Lesson2to14 { public static void main(String[] args) { Random rand = new Random(); int lucky = rand.nextInt(10); System.out.println("今日のラッキーナンバーは" + lucky + "です。"); } } 【演習1】一桁の正の整数値、一桁の負の整数値、二桁の正の整数値をランダムで生成せよ import java.util.Random; public class Exercise2to7 { public static void main(String[] args) { Random rend = new Random(); int lucky = rend.nextInt(10); System.out.println("一桁の正の整数値を表示します:" + (lucky + 1)); Random rend2 = new Random(); int lucky2 = rend2.nextInt(9); System.out.println("一桁の負の整数値を表示します:" + -lucky2); Random rend3 = new Random(); int lucky3 = rend3.nextInt(90); System.out.println("二桁の正の整数値をランダムに生成します:" + (lucky3 + 10)); } } 演習1に関しては例題からなんとなく理解をしてプログラムを組むことができました。(当たってるかは不明です...) しかし演習2と3については例題1では組めるのか理解できません。 【演習2】キーボードから読み込んだ読み込んだ整数値±5の範囲の整数値をランダムに生成して表示するプログラムを作成せよ。 0~5であればrend.nextInt(6)で簡単にランダム生成できますが、 -5~5の範囲となると例題だけでは何も思いつきませんでした。 【演習3】 -1.0以上1.0未満の実数値をランダムに生成して表示せよ。 上記の場合はnextFloatから生成された数値から-1引けばできると思います。 しかし、例えば-2.0以上10以下など正負の値をランダムで生成する方法が解っていません。 こちらも良かったらご教示お願い致します。

    • ベストアンサー
    • Java
  • アクセスのフォームで、桁数を指定したい。

    例)「1」の場合でも、3桁の設定で「001」としたい。 エクセルで言うところの書式設定でユーザー定義で桁数を指定できるように、アクセスのフォームで指定できないでしょうか? その数値を最終的にバーコード化したいのですが、その桁数が違ってしまって、表現したいバーコードが再現できないのです。 ちなみにテーブル、クエリでは書式の設定で(表面だけかも知れませんが)表示できています。 どなたかよろしくご教授のほどよろしくお願いします。

  • エクセル 乱数について

    ある特定の数値から指定する範囲内での乱数を作成する方法をおしえてください。 例えば、 100=特定の数値 100から+10(指定する範囲内)までの乱数

専門家に質問してみよう