擬似乱数列の乗り換え

Math.rondom()をソースのあちらこちらで使って書き散らしたプログラムがあるとする。再現性のあるものにするためには、seedを与えて、そのseedから開始される擬似乱数列をプログラム全体で使いまわす必要がある。Eclipseでプロジェクトを作っているのなら、こんな感じで乗り換えられる。Eclipseの多彩な機能(多彩過ぎて何ができるのかを把握するのが難しい)をもってすれば、もっと簡単にできるのかもしれないが・・・

まず、Math.random()を書き散らしたプログラムがpackage "pac1"にあるとする。Main()が"ClMain"にある。"pac1"には、複数のクラスがあり、それらは、Math.random()を複数回使っている。MersenneTwisterFastクラスは、(今では、Javaの配布ソースのようだが、別途入手したので、今は、参照可能なクラスファイルとして、"mzPackage"パッケージに所有しているものとする。
以下のように、ClMainクラスで、staticにMersenneTwisterFastクラスを宣言し、ClMainのmain()の冒頭で、引数をseedに作る。このパッケージ"pac1"内の各クラスからは、rmzが参照可能なので、すべてのソースでMath.random()と書かれている部分を、"ClMain.rmz.nextDouble()"と書き換える。
書き換えにあたっては、Eclipseツールバー「検索」から、「Java」を選び、ストリング検索のテキストフィールドに"Math.random()"といれ、検索ボタンをクリック。
Eclipseのフレーム内に同ストリングを持つ箇所がツリー構造で示されるので、逐一確認の上、置換する。

import mzPackage.*;

public class ClMain {
	static MersenneTwisterFast rmz;

	public static void main(String[] arg) {
		
		int seed = Integer.parseInt(arg[0]);
		//MersenneTwisterFast
		
		
		rmz = new MersenneTwisterFast(seed);
		...	}
}

その他の擬似乱数列発生クラスでも同様の乗り換えが可能。