/* A0220.java 2章2.解答 * ギャップ検定 * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.text.*; public class A0220 extends Applet{ public void paint(Graphics g) { int NUMBER = 10000; // 乱数発生の個数 int r = 0; // ギャップの値 int n; // 乱数発生のfor int f[] = new int [100]; // ギャップの頻度 double f0; // 理論値 double xs = 0.0; // カイ自乗値 DecimalFormat exFormat1 = new DecimalFormat(" ####.000"); for (n = 1; n <= NUMBER; n ++) { if ((int)(Math.random() * 10.0) == 0) { //0から9の乱数を発生させ0の場合 f[r] = f[r] + 1; //f[r]に1を加える r = 0; } else { r = r + 1; //0でないときはギャップを1加える } } g.drawString(" r f[r] f0) ", 10 , 10); for ( r = 0; r <= 19; r ++) { f0 = Math.pow((1.0 - 0.1),(double)r) * 0.1 * (NUMBER / 10); //理論値の計算 g.drawString(" " + r, 10 , 20 + 10 * r); g.drawString(" " + f[r], 40 , 20 + 10 * r); g.drawString(exFormat1.format(f0), 120 , 20 + 10 * r); xs = xs + ((double)f[r] - f0) * ((double)f[r] - f0) / f0; //カイ自乗値の計算 } g.drawString(" xs = " + exFormat1.format(xs), 10, 30 + 10 * r); } }