/* S0460.java * 任意分布乱数の発生 * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.awt.event.*; import window.Window; public class S0460 extends Applet implements ActionListener { Button button0; public void init() { button0 = new Button(" 再実行 "); add(button0); button0.addActionListener(this); } public void actionPerformed(ActionEvent e) { String label = e.getActionCommand(); repaint(); } int SIZE = 10; /* ヒストグラムの大きさ */ public void paint(Graphics g){ Window w ; w = new Window(); int NUMBER = 10000; int j; /* forのカウンタ */ int u; /* キザミの番号 */ int f[] = new int [SIZE]; /* ヒストグラム */ /* グラフィックの準備 */ int SPACE = 40; int HIGHT = 400; int WIDTH = 640; w.setWindow(0, 0.0,0.0,10.0,0.4, SPACE,HIGHT-SPACE,WIDTH-SPACE,SPACE); w.axis(0, "", 1, "", 0.05,g); /* メイン */ for (j = 0; j <= NUMBER; j++) { u = (int)(general() * SIZE); if (u >= 0) {f[u] = f[u] + 1;} } /* ヒストグラムを書く */ g.setColor(Color.red); for (u = 0; u < SIZE; u ++) { w.line(0, u+0.5, 0, u+0.5, (double)f[u] / NUMBER, g); } } double general() { double g[]= {0.0,0.02,0.38,0.72,0.85,0.92,0.95,0.97,0.98,0.99,1.0}; double x0 = 1.0 / SIZE; double r,x; int i = 0; r = Math.random(); while (g[i] < r) { i = i + 1; } x = (r - g[i - 1]) / (g[i] - g[i - 1]) * x0 + (i - 1) * x0; return (x); } }