LoginSignup
6
6

More than 5 years have passed since last update.

Javaで重複なしのランダムな値をファイル出力する

Posted at

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();
        }
    }

}

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6