1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
コース一覧
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分

総合 レジアプリ一気通貫

師範 / 目安 45分

閉店後のハレノヒ珈琲。陽葵さんがカウンターに1日ぶんの伝票を積み上げて、深く息を吸いました。「開店から閉店まで使えるレジ、ついに完成させよう。注文受付・レシート・本日の集計・売れ筋、ぜんぶ!」

道場の10問目、最後の依頼です。

ここまでで、書式を揃えたレシート、キャストで守った1円、メソッドという道具、配列での集計、equals での比較、そして Order クラスを作ってきました。最後の課題は、その道具を1台のレジにまとめることです。新しく覚える構文はありません。持っている道具を、正しい順番で組み上げられるかだけを問います。

伝票には不備もあります。書式が壊れた行、個数が0以下の行。不備で落ちないレジを作ってください。営業中に止まるレジは、レジとは言いません。

完成条件

public static String runRegister(String log) を定義してください。Order クラスも問9と同じ形で用意します。

log は本日の全注文の記録です。1件の注文は 商品名:単価:個数 の形で、注文どうしはカンマで区切られています。

プレーンテキスト

珈琲:450:2,シフォンケーキ:680:1,珈琲:450:1

これを1件ずつ Order に変換して配列に持ち、次の3段を改行で連結した1つの文字列を返します。

1段目 レシート — 有効な注文1件につき1行です。商品名を左詰め12文字、小計を右詰め6文字に揃え、末尾に 円 を付けます。

プレーンテキスト

珈琲 900円

2段目 合計行 — 合計 3件 2030円 税込 2233円 の形です。件数は有効な注文の件数、合計は小計の総和、税込は合計に消費税10%を掛けて切り捨てた値です。

3段目 売れ筋行 — 売れ筋 珈琲 3点 の形です。個数の合計が最も多い商品名と、その個数です。最多が複数あるときは log の中で先に登場したほうを選びます。

不備の扱いは次のとおりです。どちらも数えず、レシートにも出さず、読み飛ばします。

  • : で区切った要素が3つでない行
  • 個数が0以下の行

有効な注文が1件も無いときは、レシートと売れ筋を出さず 合計 0件 0円 税込 0円 の1行だけを返してください。

完成形は次のようになります。

プレーンテキスト

珈琲 900円 シフォンケーキ 680円 珈琲 450円 合計 3件 2030円 税込 2233円 売れ筋 珈琲 3点

全角文字は1文字として数えられるので、見た目の幅は商品名によって少しずれます。桁は文字数で揃えるのが %-12s の約束です。

進め方

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

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

一息に書こうとすると必ず崩れます。機能一覧をメソッド一覧に変換してください。伝票を Order の配列に変える処理、レシートを組む処理、集計する処理、売れ筋を探す処理。この4つに分けて、1つずつ動かしてから繋ぎます。Order の配列が背骨で、残りはその配列を読むだけの部品になります。

売れ筋は注文の件数ではなく個数の合計です。450円の珈琲を3杯の注文が1件あれば、それは3点として数えます。ここを取り違えると、通らないのに原因が見えません。


これで10問すべてです。陽葵さんは画面に流れたレシートをしばらく黙って見つめ、それから顔を上げて言いました。「ハレノヒ珈琲、レジのDX完了!」

師範が奥から一枚の紙を持って出てきます。そこには Java道場・師範代を允許する と書かれていました。1行のレシートを整形するところから始めて、いまあなたは、店を1日まわす道具を白紙から組み上げられます。

要件

  1. 問9と同じ形の Order クラス(private フィールド・コンストラクタ・getter・getSubtotal)を用意すること
  2. runRegister(String log) を public static で定義すること
  3. log をカンマで分割し、さらにコロンで分割して Order の配列に変換すること
  4. コロン区切りが3要素でない行と、個数が0以下の行は読み飛ばすこと
  5. レシートは有効な注文1件につき1行で、商品名を左詰め12文字、小計を右詰め6文字に揃えて末尾に「円」を付けること
  6. 合計行は「合計 3件 2030円 税込 2233円」の形で、税込は消費税10%を掛けて切り捨てること
  7. 売れ筋行は「売れ筋 珈琲 3点」の形で、個数の合計が最も多い商品名とその個数を出すこと
  8. 売れ筋の最多が複数あるときは log の中で先に登場したほうを選ぶこと
  9. 有効な注文が0件のときは「合計 0件 0円 税込 0円」の1行だけを返すこと
  10. 3段を改行で連結した1つの文字列を return すること

入出力例

runRegister("珈琲:450:2,シフォンケーキ:680:1,珈琲:450:1") → "珈琲 900円 シフォンケーキ 680円 珈琲 450円 合計 3件 2030円 税込 2233円 売れ筋 珈琲 3点" runRegister("抹茶ラテ:520:1") → "抹茶ラテ 520円 合計 1件 520円 税込 572円 売れ筋 抹茶ラテ 1点" runRegister("珈琲:450:1,こわれた行,抹茶ラテ:520:0,シフォンケーキ:680:2") → "珈琲 450円 シフォンケーキ 1360円 合計 2件 1810円 税込 1991円 売れ筋 シフォンケーキ 2点" runRegister("珈琲:450:2,抹茶ラテ:520:2") → "珈琲 900円 抹茶ラテ 1040円 合計 2件 1940円 税込 2134円 売れ筋 珈琲 2点" runRegister("こわれた行,珈琲:450:-3") → "合計 0件 0円 税込 0円"

ヒント

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

①方針 機能一覧をメソッド一覧に変換します。伝票を Order の配列に変える処理、レシートを組む処理、合計を出す処理、売れ筋を探す処理の4つです。Order の配列が背骨で、残りはその配列を読むだけの部品になります。1つ動かしてから次に進んでください

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

関連レッスン

  • Order クラスを設計せよ

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

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • カウンタ数を保持して増減する典型 UI
  • instanceof「このオブジェクトの実際の型は何か」を確認 → 安全に変換
  • メソッドクラスに属する関数
  • 配列サイズ固定の同型データの集まり
  • クラスデータと振る舞いを束ねる単位
  • 処理計算や代入を表す長方形
  • フィールドクラスが持つデータ
  • コンストラクタインスタンス生成時の初期化処理
main.java
学習モード
エディタを読み込んでいます

メモ

総合 レジアプリ一気通貫

⌘S で保存