2011-11-01から1ヶ月間の記事一覧

列挙子の実装を反復子のインタフェイスで扱う #4

使い所があまりないとは思うが、 ついでに、与えられた配列に対する反復子を返すIterable実装を返すメソッドiterableも書いておく。 これも配列からIterator実装を返すメソッドが定義されたクラスと同じクラス内で定義している。 仲介メソッドiterator_の意…

列挙子の実装を反復子のインタフェイスで扱う #3

EnumerationにとってのIterableはないためenumeration(Iterable)に相当するものは作れないが、 対称性を考えてEnumerationからIterableを生成するiterableメソッドを書いてみる。 メソッドは#1のiteratorメソッドと同じクラス内で定義する。 import java.uti…

コイン投げ #4

実はセカンドPCではそれぞれ19個と18個のアイテムが得られているので、 こちらだけなら等確率という話は十分信用できるのだが。 等確率を仮定したときに37回のイベントで個数差が1個よりも大きくなる確率は、

なんだか不思議なJDK6とJDK7との差異

内部クラスのメソッドからアウタークラスの同名異シグニチャのメソッドを呼び出す際の、 JDK6とJDK7でのコンパイラの振る舞いの違いについて。 以下でのJDKのバージョンはJDK6が"1.6.0_29"、JDK7が"1.7.0_01"で、ともにWindows x86版。Outerクラスは二つのク…

コイン投げ #3

とあるMMORPGにおいて数週間に数回の頻度でイベント的に1回に1個どちらかが得られる2種類のアイテムがある。 アイテムのどちらが得られるかは半々の確率だとの話がある。 今までに2種類のアイテムをそれぞれ15個と23個得た。 半々の確率だという話は本当なの…

コイン投げ #2

完全なコインを100回投げて表が出る回数と裏が出る回数の差が以内になる確率は、 また、は、表と裏の回数の差がを超える確率とする。 /**/ 0 0.079589 0.920411 1 0.235647 0.764353 2 0.382701 0.617299 3 0.515882 0.484118 4 0.631798 0.368202 5 0.72874…

コイン投げ #1

完全なコインを100回投げて表が50回出る確率は、

Firefoxのコンテクストメニューの項目を非表示にする

CSS

カテゴリはCSSだがウエブページの見た目をデザインするためではなく、 Mozilla FirefoxのUIの見た目をカスタマイズするために使われているスタイルシートについてである。 Firefoxを使っているとコンテクストメニューの不要な項目が邪魔で仕方なくなってきた…

列挙子の実装を反復子のインタフェイスで扱う #2

使ってみる。 以下は例によってiteratorメソッドを定義しているクラス内で定義されたメソッド内での例である。 クラス外で使うのならiteratorメソッドが定義されているクラス名を付けてiterator()を呼び出す必要がある。 もう一つ、Vectorの生成にJDK7で導入…

列挙子の実装を反復子のインタフェイスで扱う #1

ついでなので逆にEnumerationからIteratorを得る方向も書いてみる。 import java.util.Enumeration; import java.util.Iterator; import java.util.NoSuchElementException; ...snip public static <E> Iterator<E> iterator(final Enumeration<E> enumeration) { ret</e></e></e>…

反復子の実装を列挙子のインタフェイスで扱う #6

Iterableではないが、配列の要素を列挙するEnumerationも得られるといいかもしれない。 ...snip import java.util.NoSuchElementException; ...snip public static <E> Enumeration<E> enumeration(final E[] array) { return new Enumeration<E>() { private int ind</e></e></e>…

反復子の実装を列挙子のインタフェイスで扱う #5

#3の使用例では結局Collectionに対するEnumerationを得ていたのであまりありがたみがない気が。 Iterable由来でない(当然Collection由来でない)Iteratorを与えてみる。 import java.util.Enumeration; import java.util.Iterator; ...snip for ( Enumerati…

反復子の実装を列挙子のインタフェイスで扱う #4

このenumeration(Iterator)はもっと簡潔に書くことができた。 ...snip public static <E> Enumeration<E> enumeration(final Iterator<E> iterator) { return new Enumeration<E>() { public boolean hasMoreElements() { return iterator.hasNext(); } public E nextEle</e></e></e></e>…

反復子の実装を列挙子のインタフェイスで扱う #3

#1の最初のコードを汎用的にする。 import java.util.Enumeration; import java.util.Iterator; ...snip public static <E> Enumeration<E> enumeration(final Iterator<E> iterator) { return new Enumeration<E>() { private Iterator<E> iter = iterator; public boolean</e></e></e></e></e>…

反復子の実装を列挙子のインタフェイスで扱う #2

Collectionを実装するクラスが持つ要素を列挙するEnumerationが欲しい場合はCollections.enumeration(Collection)がまさに適任で、 これは実質的にCollectionから得られるIteratorをEnumerationとしてアクセスすることに他ならない。 が、Collectionから得ら…

反復子の実装を列挙子のインタフェイスで扱う #1

列挙子Enumerationは古くからあったため反復子Iteratorが登場してからもEnumerationを要求するものはなくなったわけではない。 Iteratorの実装が与えられていた場合に、それをEnumerationとしてアクセスすることを考える。 これは単純にIteratorの実装に委譲…

正方形の周長 #15

日本語化用のファイルに不備があって必要なキー文字列に対応するものが存在しない場合、 例えば、SquareParametersResources_ja.propertiesのgui.side.labelの行をコメントアウトすると、 SquareParametersResources_ja.properties (試験的に一時変更) # gui…

正方形の周長 #14

SquareParametersPaneによって表に出ないSquareParametersの例外メッセージも確認してみる。 ...snip try { new SquareParameters().setSide(-1); } catch (IllegalArgumentException e) { System.err.println(e); } ...snip を日本語環境で実行すると、 jav…

正方形の周長 #13

日本語化してみる。 キー文字列と日本語メッセージの対応付けをしたファイルを用意する。 SquareParametersResources_ja.properties.txt gui.side.label = 一辺の長さ gui.perimeter.label = 周の長さ model.side.exception.message = 一辺の長さとして {0} …

正方形の周長 #12

次は多言語への対応を行ってみる。つまり言語に依存した情報を外へ放り出す。 Javaにはi18n向けの機構が標準で用意されているので楽ができる。 まず、言語に依存した情報を提供するためのクラスSquareParametersResを作る。 import java.util.ResourceBundle…

正方形の周長 #11

せっかくGUI部品化したのでアプリケーションだけでなくアプレットでも使ってみる。 import java.awt.FlowLayout; import javax.swing.JApplet; public class SquarePerimeterApplet extends JApplet { public SquarePerimeterApplet() { setLayout(new FlowL…

正方形の周長 #10

SquareParametersPaneを利用してSquarePerimeterを書くと、 import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class SquarePerimeter implements Runnable { public void run() { JFrame f = new JFram…

正方形の周長 #9

今度はSquarePerimeterで定義されているトップレベルウインドウとその中身を分離して、 中身のGUIの方をJPanelを継承したSquareParametersPaneクラスとしてコンポーネント化する。 といってもSquarePerimeterでは中身の方の定義が大部分を占めているので#8の…

正方形の周長 #8

SquareParametersインスタンスへの参照を持ち、 正方形の諸元に関することはそれに委譲するようにSquarePerimeterクラスを変更する。 ...snip public class SquarePerimeter implements Runnable, ActionListener, FocusListener { private SquareParameters…

正方形の周長 #7

一つで全てをこなせるクラスができあがってよきかなよきかな。 というわけで今度は無駄にたくさんのクラスを作って混沌へと還元していく。 まずは正方形の諸元を表現するクラスを定義する。 public class SquareParameters { private double side = 0; publi…

正方形の周長 #6

二つのJTextFieldの値の一方から他方を変更できるようにしたが、それが原因の問題が発生する。 JTextFieldに入力した値の確定はActionEventの発生(Enterキーの押下)によって行われるよう実装している。 もし確定時に数値に変換できない入力であった場合は…

正方形の周長 #5

これまでと逆で、周の長さから辺の長さが得られるようにも変更する。 どちらの長さもJTextFieldで入力し、一方が変更されればもう一方をそれに合わせて変更する。 ...snip public class SquarePerimeter implements Runnable, ActionListener { private JTex…

正方形の周長 #4

辺の長さが負なのは変なので、この場合も変更を無効にする。 辺の長さが0の正方形は正当なのかというのは微妙な問題だが、ここではありということで。 ...snip public void actionPerformed(ActionEvent e) { try { double s = Double.parseDouble(((JTextFi…

正方形の周長 #3

ラベルを付けて何のフィールドであるかを表示する。 とりあえずレイアウトマネージャには配置が楽なGroupLayoutで。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.GroupLayout; import javax.swing.GroupL…

正方形の周長 #2

この話題における目的や目標は設定していない。 思いつくままにお気楽にソースを弄っていくだけなので、 飽きたりして投げ出す可能性も含めて最終的にどうなるか分からない。とりあえず数値でないものが入力されたときにエラーを吐かないように修正。 ...sni…