java Hone 22:10 22:55

「改訂第2版 Java言語プログラミングレッスン 上」を読み終えた後、さて何か自分で考えてプログラミングしてみようと思い、先日Perlで書いた 2つの時刻の間隔を分で表示するプログラム のJava版を作ってみました。
「上」巻を読んで、とりあえずこんなプログラムを作れるようになりました。(もちろん人によってはもっとすごいプログラムも作れるでしょう。)
上巻の最後に出てきた クラス や コンストラクタ を無理矢理使ってみました。文字列表現 toString メソッドってすごくいいなぁなんて思いがありまして。
そんなわけで、前にRubyでお世話になった id:kakkunpakkun さんは元々Javaの方が本業ということで、ぜひ添削or採点していただけないでしょうかと無理矢理トラックバックを送ってみる。よろしかったら時間の都合のよろしいときに是非お願いします。
分を求めるのは コンストラクタ の中でやっとくべきなのかな?とかとか。。


main メソッド

public class Hone {
    public static void main(String[] args) {
        HoneTime htime;
        if (args.length != 2) {
            System.out.println("使い方: java Hone sTime eTime");
            System.exit(0);
        }
        htime = new HoneTime(args[0], args[1]);
        System.out.println(htime);
    }
}


HoneTime クラス。長い。

public class HoneTime {
    String s1, s2;
    
    // コンストラクタ
    public HoneTime(String s1, String s2) {
        this.s1 = s1;
        this.s2 = s2;
    }
    
    // 文字列表現
    public String toString() {
        String s = s1 + " - " + s2 + " === ";
        int m, m1, m2;
        
        if ((m1 = ji_to_fun(s1)) >= 0 && (m2 = ji_to_fun(s2)) >= 0) {
            m = m2 - m1;
            s += m + " min (" + (m / 60.0) + ")";
        } else {
            s += "時刻の入力が正しくありません。";
        }
        
        return s;
    }
    // 時刻を分に変換して返すメソッド
    private int ji_to_fun(String s) {
        int fun = 0;
        int idx;
        String s1, s2;
        
        try {
            idx = s.indexOf(':'); // ':'を探す
            s1 = s.substring(0, idx);  // ':'より前の文字列を入れる
            s2 = s.substring(idx + 1); // ':'より後の文字列を入れる
            // 文字列を数値に変換しつつ分を計算
            fun = Integer.parseInt(s1) * 60 + Integer.parseInt(s2);
            
        } catch (NumberFormatException e) {
            fun = -1;
        }
        
        return fun;
    }
}


そしてコンパイル&実行結果。

D:\>javac Hone.java HoneTime.java

D:\>java Hone
使い方: java Hone sTime eTime

D:\>java Hone 22:10 22:55
22:10 - 22:55 === 45 min (0.75)

D:\>java Hone 22:10 22:5a
22:10 - 22:5a === 時刻の入力が正しくありません。


Javaもけっこう楽しいかも。