1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
  6. test 6
コース一覧
Java道場 ハレノヒ珈琲のレジを作る10問
売れ筋メニューを探せ

Java道場 ハレノヒ珈琲のレジを作る10問

Java入門で身に付けた技を、カフェのレジ開発で試す演習専用コースです。解説はありません。依頼と完成条件だけを読み、白紙から自分で組み立てます。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。レシートの桁揃えから始まり、型の落とし穴、条件分岐、switch、配列の集計、メソッドへの分割、文字列の比較を経て、最後はクラス設計とレジアプリの統合まで、10問で Java の主要な道具を一巡します。1問15分から45分、全10問で約5時間です。Java入門を終えて「読めるけれど自分では書けない」と感じている方に向いています。

1
初段
01. レシートを整形して返せ15分
02. 税込計算の切り捨て事故を防げ15分
03. 注文金額でランク判定20分
04. メニュー番号で注文を受けろ20分
2
中段
01. 複数注文の合計と件数25分
02. 会計処理をメソッドに分けよ25分
03. 本日の注文を配列で管理せよ30分
04. 売れ筋メニューを探せ30分
3
師範
01. Order クラスを設計せよ35分
02. 総合 レジアプリ一気通貫45分

売れ筋メニューを探せ

中段 / 目安 30分

陽葵さんが仕入れ表を広げて、真剣な顔で言いました。「一番売れたメニューを知りたいの。豆もケーキも、多めに仕入れて余らせたら全部うちの損だから。来月の仕入れがかかってるの」。

数を数えるだけの問題に見えます。ところがJavaでは、ここに入門者のほぼ全員が一度落ちる落とし穴があります。師範はそれを知っていて、あえて何も言わずに見ています。踏んでから気付いてください。そのほうが二度と忘れません。

文字列の比較という落とし穴

数値の比較は == で書きます。では文字列も == でよいかというと、これが違います。

Javaの String はオブジェクトです。== はオブジェクト同士では「中身が同じか」ではなく「同じ実体を指しているか」を見ます。ソースコードに直接書いた "珈琲" 同士なら、たまたま同じ実体が使い回されて true になることがあります。ところが、計算や分割で組み立てられた文字列は別の実体になり、中身が同じでも == は false を返します。

「手元では動いたのに本番で数が合わない」という、いちばんたちの悪いバグの正体がこれです。中身を比べたいときは equals を使ってください。

完成条件

bestSeller(String log) というメソッドを public static で定義してください。

log は本日の注文を記録したもので、商品名がカンマ区切りで並んでいます。たとえば 珈琲,抹茶ラテ,珈琲,シフォンケーキ,珈琲 のような形です。

これを商品名ごとに分解し、最も多く注文された商品名だけを返してください。

  • 最多が複数ある場合は、log の中で先に登場したほうを返します
  • log が空文字列のときは 注文なし を返します

返すのは商品名そのものです。件数や記号は付けません。

進め方

白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

開かずに10分粘って進まないなら、①だけ開けてください。粘る時間そのものには価値がありません。価値があるのは、自分で書いた行が動いた瞬間です。

分割してできた文字列は、ソースに書いた文字列とは別の実体です。ここで == を使うと、どの商品も1件ずつしか数えられません。もし全部の件数が1になったら、それが落とし穴を踏んだ合図です。比較を equals に書き換えてもう一度動かしてみてください。

要件

  1. bestSeller(String log) を public static で定義すること
  2. log をカンマで分割して商品名ごとの件数を数えること
  3. 文字列の比較は == ではなく equals を使うこと
  4. 最も件数の多い商品名を返すこと
  5. 最多が複数あるときは log の中で先に登場したほうを返すこと
  6. log が空文字列のときは「注文なし」を返すこと

入出力例

bestSeller("珈琲,抹茶ラテ,珈琲,シフォンケーキ,珈琲") → "珈琲" bestSeller("抹茶ラテ,抹茶ラテ,珈琲") → "抹茶ラテ" bestSeller("珈琲,抹茶ラテ") → "珈琲" bestSeller("シフォンケーキ") → "シフォンケーキ" bestSeller("珈琲,抹茶ラテ,抹茶ラテ,珈琲,シフォンケーキ,シフォンケーキ,抹茶ラテ") → "抹茶ラテ" bestSeller("") → "注文なし"

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 分割してできた商品名の配列を用意し、1つ1つについて「同じ名前が配列全体に何個あるか」を数えます。その件数がこれまでの最大を上回ったときだけ答えを更新すれば、先に登場したほうが自然に残ります

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • Order クラスを設計せよ

    注文という「もの」をクラスにします。データと振る舞いを1つに束ねます。

  • 本日の注文を配列で管理せよ

    1日ぶんの注文を集計します。平均は整数の割り算のままでは出ません。

  • 会計処理をメソッドに分けよ

    税込計算と割引計算を、2つのメソッドという道具にまとめます。

  • 複数注文の合計と件数

    注文の配列を走査して、品数と合計を1つの報告にまとめます。

main.java
学習モード
エディタを読み込んでいます

メモ

売れ筋メニューを探せ

⌘S で保存