これでどうだ!?

昨日、あまりに実験結果の評価が悪かったのでプログラムの見直し+実験結果の見直しをしていました。そしたらやっぱりいました、あの嫌なやつ。バグが潜んでいました。今回のは、これまでバグの確認のために使っていたデータ以外の、本番用のデータで確認したらけっこうあっさり分かってしまいました。これはちゃんとテストをしろよ!という神からの思し召しなんでしょうか。それにしても、これまでこんなにバグが潜んでいたのかを思うと凹みます。

しかも間違えていたのが、コレクション中の最小値を見つける部分という、かなり情けない場所。やっぱり例外処理をちゃんとするべきですね。

double min(Collection<Result> col) {
    double min = Double.MAX_VALUE;
    for(Result r : col) {
        min = r.getValue() < min ? r.getValue() : min;
    }
    return min;
}

はい、これが問題のソースコードです。一見正しそうに見えますが、ちょっと処理が抜け落ちています。さて、どこでしょう…。

--
正解は次の通りです。

double min(Collection<Result> col) {
    if(col.size()<=0)
        return 0;
    double min = Double.MAX_VALUE;
    for(Result r : col) {
        min = r.getValue() < min ? r.getValue() : min;
    }
    return min;
}

コレクションの要素数が0のときの処理が抜けていたのでした。

トラックバック(0)

このブログ記事を参照しているブログ一覧: これでどうだ!?

このブログ記事に対するトラックバックURL: http://trialpc.net/mt/mt-tb.cgi/1509

コメントする

Advertizement

このブログ記事について

このページは、tetsuが2008年1月24日 18:20に書いたブログ記事です。

ひとつ前のブログ記事は「検査結果」です。

次のブログ記事は「9人の人間が3つの部屋に入る組合せ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.0

最近のコメント

カウンタ

リンク