昨日、あまりに実験結果の評価が悪かったのでプログラムの見直し+実験結果の見直しをしていました。そしたらやっぱりいました、あの嫌なやつ。バグが潜んでいました。今回のは、これまでバグの確認のために使っていたデータ以外の、本番用のデータで確認したらけっこうあっさり分かってしまいました。これはちゃんとテストをしろよ!という神からの思し召しなんでしょうか。それにしても、これまでこんなにバグが潜んでいたのかを思うと凹みます。
しかも間違えていたのが、コレクション中の最小値を見つける部分という、かなり情けない場所。やっぱり例外処理をちゃんとするべきですね。
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のときの処理が抜けていたのでした。
コメントする