2009-06-01から1ヶ月間の記事一覧

自動販売機の練習問題。enumを使ってみる。飲み物の追加が簡単になった。メニュー表示のハードコーディング部分を解消したがやや見にくい。switch文にenumを使えるのでよい。enumだと予想外の値が来る心配がいらなくなる。ただ飲み物のストック管理を実装し…

実際にコードを書くところを人に見せるという作業をしたら、手順を意識するのでよかった。これがペアプログラミングになったらもっと緊張する。アクセス修飾子のことを考えるのは処理内容を実装してから、という手癖? が自分にはあるっぽいので気をつける。

終了時にHashMapの内容を外部ファイルに書き込む際に、すでに書き込まれている内容を無視して、一行目から上書きしていくのは結構なオーバーヘッドではないか。と思ってこういうコードを書いたのだけど、どっちが無駄だろう。あとHashMapは順序を保持しない…

HashMap.entrySetを取得後、iteratorを呼んで回していくとき。 Set entries = map.entrySet(); for(Iterator i=entries.iterator();i.hasNext();) { Map.Entry<String, String>entry = (Map.Entry<String, String>)i.next(); System.out.println(entry.getKey()+"is"+entry.getValue()); } i.</string,></string,>…

メモ

choistudyのjavaドリルをやっています。 &,|,^ 演算子のオペランドは、必要に応じて int 型もしくは long 型に拡張されます。この場合、演算の結果も int 型もしくは long 型となります。 instanceof演算子で、特定の型とその型の配列を比べたらfalseは返ら…

FileオブジェクトのcreateNewFileメソッド

eclipse上で、ファイル名のみでファイル新規作成すると、プロジェクトのフォルダ直下に作成される。

課題

これ必要かなあっていうメソッドが仕様で定義されてて、どう使っていいか悩む。結局うまくいかず。

メモ

doubleのゼロ除算はエラーにならない。Double.POSITIVE_INFINITYか、Double.NEGATIVE_INFINITYが返る。インスタンス経由でクラスメソッドを呼ぶ場合(非推奨)、変数の型のクラスから呼ばれる。インタフェイスのメソッドで例外を投げるよう定義されている場…

型変換

エラーになる変数はどれかという問題。 byte a = (long) 1; byte b = (int) 1; byte c = (short) 1;1. 式が型 int の定数式 2. 変数の型が、byte,short, char のいずれか 3. 式の値(定数式なのでコンパイル時にわかる)が、その変数の型で表現可能 の条件…

正規表現のキャプチャ

StringTokenizerは古いからあんまり使うな、String.splitかregexpを使えと書いてあったので。 Pattern p = Pattern.compile("(\\d{4})/(\\d{1,2})/(\\d{1,2})"); Matcher m = p.matcher("2007/12/31"); if(m.find()) { String year = m.group(1); String mon…

BigDecimalのコンストラクタに文字列を渡す

BigDicimalのコンストラクタに渡す引数に、なぜ間にStringをかませるのか。今日教えてもらって納得したつもりになったんだけど、家に帰ってみるとまだ分かってなかった。解答に示されたコードは以下の通り。 double num = Math.random(); BigDecimal bd = ne…

コレクションの練習

InventoryクラスとItemクラスを作った。メインではInventoryのインスタンスを生成してmenuメソッドを呼ぶだけにした。HashMapをフィールドとして持つのはいいだろうか。BufferedReaderはフィールドとして相応しくない感じがするので、いちいちローカル変数と…

正規表現の定義済み文字クラスに、バックスラッシュを二個つける理由。たとえば数字にマッチさせたいときは\dを使うが、パターン文字列を指定する際には\\dとすることにもやもやしていた。 Java ソースコードの文字列リテラルに含まれるバックスラッシュは、…

メアドの正規表現はこれで完璧なはずがないので注意。とりあえず@と.の連続をはじいた。 public class Drill8 { //メールアドレスの正規表現判定 public static void main(String[] args)throws IOException{ System.out.println("メールアドレスと思しき文…

追加課題

Stringクラスのequalsを使うとき、メソッドを実行する側がnullだと例外発生する。引数がnullならよい。

初期化子の実行順

クラスが読み込まれる順に静的初期化子 インスタンス化→親クラスのインスタンス初期化子→親クラスのコンストラクタ 子クラスのインスタンス初期化子→子クラスのコンストラクタ

前に自作したカレンダークラスを使うのをやめて、java.utilのカレンダー、グレゴリアンカレンダークラスを使う。後で曜日の判定を見直す。

インタフェイスの実装

インタフェイスで定義したフィールドは、実装クラスのインスタンスではどういう扱いになるのか。今日試してみたら、インタフェイスのスタティック変数ですよ、みたいな感じだった。 追記 インタフェイスで宣言した変数は、暗黙のうちにpublic static finalに…

多重配列の練習問題。ホテルの部屋探し。

じゃんけんゲーム。先に2勝したら勝ち。playerクラスとjudgeクラスを使う。

整数値をコマンド入力して自動販売機への操作を実現します。クラスの設計は自由にしてよい。

型変換

char型の変数に数値を足すと数値に変換されてしまうが、インクリメントした場合は、文字コードがひとつ加算された文字になるぞ。

曜日判定

ツェラーの公式というらしい。ネットを参照するとプリントのものと若干公式が異なる。以下はプリントのもの。 int years = year + (year-1)/4 - (year-1)/100 + (year-1)/400; return years%7 で、渡した年の元旦の曜日が分かる。ゼロが日曜日。式の意味まで…

素数判定

やさjavaレッスン6の章末問題。エラトステネスの篩。

カレンダー表示

void display(int year, int month){ String[]weekHeader={"日","月","火","水","木","金","土"}; for(String day: weekHeader){ System.out.print(day+" ");} System.out.println(); int firstDayOfWeek = dayOfWeek(year, month, 1); int lastDay = endMon…

ショートカット

sysoだけでSystem.out.println();が補完される。2strokes分得ですね。

配列の複製

配列そのものをコピーするには int[]array = {}; int[]copiedArray = new int[array.length]; などとしてから、forループの中で値をひとつずつ代入していきましたが、配列の持つcloneメソッドを使えば一行で終わります。 int[]copiedArray = array.clone(); …

ショートカットAlt+Shift+Q

Alt+Shift+Q, P でパッケージビューをアクティブに出来る。パッケージビューを高速化していて、別の階層のクラスを開きたい。でも、わざわざマウスを動かすのが面倒というときに。Alt+Shift+Q, C は標準入力待ちでコンソールをアクティブにしたいとき。

フラグの切り替え

lesson6のSample8.javaのmainメソッド内(やさjava 163p) フラグ変数b1をifの条件式に使うところ。 b1 = !b1と書くと、初期値に関わらず、電気のスイッチをオンオフするように値を切り替えることが出来る上、それをifブロックの外に置くとコードもすっきりし…

紙ベースより便利な気がするのでメモをつけることにしました。