Javaで重複なしのランダムな値をファイル出力する
PostgreSQLにサンプルデータが欲しかったので
(昇順数値,重複しないランダムな整数,文字列⁺重複しないランダムな整数)
のcsvデータを出力するプログラムを書きました。
RandomValueFileCreate
/*
* 2015年6月5日作成
*
* 作成者:show
*
* 以下のCSVファイルを出力する。
*
* 1から1000000の値を順番に出力,
* 1から1000000の値を重複なしでランダムな値を出力,
* 1から1000000の値を重複なしでランダムな値と文字列と組み合わせて出力
*
*/
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
public class RandomValueFileCreate {
public static void main(String args[]) {
try {
//出力先を作成する
FileWriter fw = new FileWriter("C:\\temp\\sampleData.csv", false);
PrintWriter pw = new PrintWriter(new BufferedWriter(fw));
String str = "hoge"; //出力する文字列
final int n = 1000000; //要素数
boolean num[] = new boolean[n]; //重複判定用
Random rand = new Random(); //ランダムな数値
// すべての重複判定用配列をfalseにしておく
for(int i=0; i<n; i++){
num[i] = false;
}
//要素数回数をループ
for(int i=0; i < n ; ){
int p = rand.nextInt(n);
if(num[p] == false){ //まだ使ってない値か判定
pw.println((i+1) + "," + (p+1) + "," + str + "," + (p+1)); //初めて使う値ならファイル出力
num[p] = true; //使った値はtrueにしておく
i++; //ループ用の値をインクリメント
}
}
//閉じる
pw.close();
//終了メッセージを画面に出力する
System.out.println("出力が完了しました。");
} catch (IOException e) {
//例外時処理
e.printStackTrace();
}
}
}