開発覚え書き

ソフトウェアシステムの開発に関わるさまざまなことの覚え書き

java.util.RandomのnextIntメソッド

2005-11-28 11:39:06 | Weblog
java.util.RandomはJavaの初期からあるが、
範囲を指定した整数乱数(0 以上 n-1 以下)を得る
     public int nextInt(int n);
というメソッドがある。
しかしこれはバージョン 1.2 のときに導入された
もので、1.1 以下では存在しないので自前で用意する必要がある。
ちなみに、実装されているメソッドのソースは以下の
ようなものである。
このアルゴリスムよくわからない。出典も不明。
単に、
     return (int)((n * (long)next(31)) >> 31);
だけじゃダメなのだろうか?

public int nextInt(int n) {
     if (n <= 0)
	throw new IllegalArgumentException("n must be positive");
     if ((n & -n) == n) // n が2のべき乗のとき
         return (int)((n * (long)next(31)) >> 31);
     int bits, val;
     do {
         bits = next(31);
         val = bits % n;
     }while (bits - val + (n-1) < 0);
     return val;
 }

コンポーネントのpreferredSizeプロパティ

2005-11-21 17:58:25 | Weblog
SwingのJComponentでは、preferredSizeというプロパティがあり

public Dimension getPreferredSize();
public void setPreferredSize(Dimension preferredSize);

で参照/設定できる。

一方、AWTのComponentでは、
J2SE 1.4 までは

public Dimension getPreferredSize();

はあるが、setterがなく、
レイアウトマネージャに希望サイズを知らせるには

ComponentのサブクラスでgetPreferredSize()をオーバーライドする

しかなかった。
ところが、J2SE 5.0 になって、AWT の Component にも

public void setPreferredSize(Dimension preferredSize);

ができている。
細かい変更だが、要望が多かったので対応したと思われる。