本日の注文を配列で管理せよ
中段 / 目安 30分
閉店後の店内。陽葵さんがレジ袋を畳みながら言いました。「今日の注文金額、ぜんぶ記録して閉店時に集計したいの。感覚だと『今日は忙しかった気がする』で終わっちゃうから。売上は嘘をつかないから」。
これまで扱ってきたのは、1つの変数に入る1つの数でした。今日1日ぶんの注文は、何件になるか事前にはわかりません。複数の値をひとまとまりで持つ入れ物が要ります。それが配列です。
完成条件
summarize(int[] amounts) というメソッドを public static で定義してください。
amounts は本日の注文金額を並べた配列です。この配列を先頭から最後まで走査して、次の2つを求めます。
- 合計 — 全注文金額の足し算。
intです - 平均 — 合計を件数で割った値。小数第1位までにします
返す文字列の形は 3件 / 合計 2130円 / 平均 710.0円 です。
注意する点が2つあります。
1つめは平均の型です。int 同士の割り算は小数が消えます。問2で1円のズレに泣いたのと同じ罠が、ここでは小数点以下ごと消える形で出てきます。キャストして小数にしてから割ってください。
2つめは注文が1件も無い日です。配列が空のとき、件数で割ると実行時にエラーが起きます。空の場合は 0件 / 合計 0円 / 平均 0.0円 を返してください。台風の日に落ちるレジは、レジとは言いません。
進め方
白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。
開かずに10分粘って進まないなら、①だけ開けてください。粘る時間そのものには価値がありません。価値があるのは、自分で書いた行が動いた瞬間です。
配列の件数は amounts.length で取れます。丸括弧を付けないことに気を付けてください。文字列の length() とは書き方が違います。ここは多くの人が一度は間違える場所です。
小数第1位までの整形は、これまで使ってきたレシートの書式指定がそのまま使えます。String.format はその書式指定を、画面に出す代わりに文字列として受け取る形です。
要件
- summarize(int[] amounts) を public static で定義すること
- 配列を走査して全注文金額の合計を求めること
- 平均はキャストして小数で計算し、小数第1位まで表示すること
- 返す文字列の形は「3件 / 合計 2130円 / 平均 710.0円」であること
- 配列が空のときは「0件 / 合計 0円 / 平均 0.0円」を返し、エラーで落ちないこと
- メソッドの中で println せず、値を return で返すこと
入出力例
summarize([450,680,1000]) → "3件 / 合計 2130円 / 平均 710.0円"
summarize([500,500,500,500]) → "4件 / 合計 2000円 / 平均 500.0円"
summarize([450,680]) → "2件 / 合計 1130円 / 平均 565.0円"
summarize([100,100,100]) → "3件 / 合計 300円 / 平均 100.0円"
summarize([980]) → "1件 / 合計 980円 / 平均 980.0円"
summarize([]) → "0件 / 合計 0円 / 平均 0.0円"ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです