2009年06月28日

【1日1Java】ランダムな数値、アルファベットを取得

// JRE 1.6.0_07
// java.lang.Math
// java.util.Random
// ランダムな数値、ランダムなアルファベット(a-z)を取得する
// tag ランダム Math

// 0〜9までのランダムな数を取得する
// Math.randomは0.0以上、1未満(1を含まない)の値を返す
// ので、10かけてfloorすれば、0〜9の値になる
int num = (int) Math.floor( Math.random() * 10 );
System.out.println( num );

// JavaDoc
// http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Math.html#random()

// ランダムなアルファベットを取る場合は、「a = (char)97」なので、
// 「a-z = 26文字」に「97」を足す
char c = (char) Math.floor( Math.random() * 26 + 97 );
System.out.println( c );

// そういえば、java.util.Randomというのが居た
// こちらの方がnextIntが居る分、可読性が良いかも
Random random = new Random();
num = random.nextInt(10);
System.out.print( num );

// コンストラクタでシードを指定できるけど、デフォルトコンストラクタの中で
// こんな風にシードを指定してるので、普通は気にしなく良いかも
// ++seedUniquifier + System.nanoTime()
// (内部的に持ってるlongの値をインクリメントしつつ、ナノ秒を足してる)

// a-zを取る場合はこんな感じ
// nextCharという子はいない()
c = (char) Math.floor( random.nextInt(26) + 97 );
System.out.print(c);

// JavaDoc
// http://java.sun.com/javase/ja/6/docs/ja/api/java/util/Random.html

// ちなみにjava.lang.Math.randomは、内部的にjava.util.Randomの
// インスタンスをシングルトンで持っていて、それを使用している
// ので、パフォーマンス上はMath.randomの方が良いかも