つくる: 商品集計
条件付きの集計
第3章で学んだ if・for・continue を組み合わせます。演習では、売切れを飛ばして件数を更新する部分を作ります。合計や平均の表示は用意済みです。
if 条件で分ける
for 繰り返す
continue 条件に合わないものを飛ばす
集計 合計・件数・平均作るのは、売切れを除いた集計です。
販売中2件 合計2199円 平均1099円 (除外1件)2つの並びを同時に見る
たとえば作業時間の並びと、取り消されたかどうかの並びを考えます。同じ添字が同じ作業を指します。
minutes [20, 15, 30]
cancelled [false, true, false]
↑同じ作業1つの for で両方を見ます。
Go
for i := 0; i < len(minutes); i++ {
if cancelled[i] {
continue
}
// ここに来るのは取り消されていない作業だけ
}continue で先に弾くと、集計の本筋が右に寄らずに済みます。前のレッスンで触れた形です。
数える対象が2つある
集めるものが増えます。
実施した作業の件数
実施した作業の合計時間
取り消された件数それぞれ入れ物を用意して、ループの中で更新します。continue で飛ばす直前に、除外の数を1つ増やしてください。
Go
if cancelled[i] {
ignored++
continue
}順番が逆だと数えられません。continue から先は実行されないからです。
全部が売切れのとき
販売中が0件になります。ここで平均を出すと 0 で割ることになります。
販売中0件 (除外3件)合計と平均を書かない形にします。前のレッスンで学んだ0件の分岐は、ひな形に用意してあります。
順番に作る
1. 売切れなら除外件数を増やして continue する
2. 飛ばされなかった商品で販売中の件数を増やす1段ごとにテストを流してください。
要件
- 売切れの商品は集計から外し、除外の件数として数える
- 販売中が1件以上なら
販売中N件 合計M円 平均K円 (除外L件)を返す - 販売中が0件なら
販売中0件 (除外L件)を返す - 平均は販売中の合計を販売中の件数で割る
- 2か所の TODO だけに、売切れの除外と販売中の件数更新を足す
ヒント
編集 ゆめさく編集部