Aritalab:Lecture/Programming/Java/Random
From Metabolomics.JP
< Aritalab:Lecture | Programming | Java(Difference between revisions)
m |
m |
||
Line 1: | Line 1: | ||
==乱数の作成== | ==乱数の作成== | ||
− | Java プログラムで乱数を発生させるには Random | + | Java プログラムで乱数を発生させるには Random クラスを使います。以下のプログラムは 50 ステップのランダムウォークを 1000 回繰り返し、結果を 5 行ずつまとめて積算して表示します。 |
<pre> | <pre> | ||
Line 26: | Line 26: | ||
} | } | ||
} | } | ||
− | + | </pre> | |
+ | 以下は表示のための関数です。 | ||
+ | </pre> | ||
String makeString(char c, int length) | String makeString(char c, int length) | ||
{ // 文字 c を繰り返して長さ length の文字列を作成 | { // 文字 c を繰り返して長さ length の文字列を作成 | ||
Line 70: | Line 72: | ||
Random R = new Random(); | Random R = new Random(); | ||
− | としてRandom クラスの実体を一つ作成し、R | + | としてRandom クラスの実体を一つ作成し、R に対して上記のメソッドを繰り返し適用して乱数を発生させます。上のプログラムで引数として与えている 0.5 を 0.8 などにすると、分布が偏ることが観測できます。 |
− | + |
Revision as of 09:33, 2 June 2011
乱数の作成
Java プログラムで乱数を発生させるには Random クラスを使います。以下のプログラムは 50 ステップのランダムウォークを 1000 回繰り返し、結果を 5 行ずつまとめて積算して表示します。
import java.util.Random; public class RandomWalk { int max = 100; int[] result = new int[max]; Random rand = new Random(); void binomial(double p) { // 二項分布を作る関数 for (int k = 0; k < max * 10; k++) { // 施行を max * 10 回繰り返す int n = 0; // 確率 p で +1, (1-p)で -1 を max/2 ステップ for (int i = 0; i < max / 2; in; else --n; result[n + max / 2 - 1]) sb.append(c); return sb.toString(); } void print() { // プリントアウト int line = 20; // 全体を20行で表示 for (int i = 0; i < line; i++) { int sum = 0; for (int j = (i * max) / line; j < ((i + 1) * max) / line; j++) sum += result[j]; if (sum / 10 == 0) continue; String s = makeString('*', sum / 10); System.out.println(i + ":" + s); } } static public void main(String[] args) { RandomWalk rw = new RandomWalk(); rw.binomial(0.5); rw.print(); } }
Random クラスは以下のメソッドを備えています。
- nextInt() ランダムな整数を生成
- nextInt(int n) 0 から n までのランダムな整数を生成
- nextDouble(), nextFloat() 0 から 1 の間でランダムな実数を生成
- nextGaussian() 平均 1, 分散 1 の正規分布に従う乱数を生成
最初に
Random R = new Random();
としてRandom クラスの実体を一つ作成し、R に対して上記のメソッドを繰り返し適用して乱数を発生させます。上のプログラムで引数として与えている 0.5 を 0.8 などにすると、分布が偏ることが観測できます。