1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
コース一覧
Java道場 ハレノヒ珈琲のレジを作る10問
Order クラスを設計せよ

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分

Order クラスを設計せよ

師範 / 目安 35分

師範がカウンターに腰を下ろし、あなたの書いたコードを長いこと眺めてから言いました。「商品名の配列と、単価の配列と、個数の配列。3本の配列を、番号を頼りに並走させておるな」。

図星です。3番目の注文を知るには、3つの配列の3番目をそれぞれ見る必要があります。「1本だけ並べ替えたらどうなる。1本だけ1件消したらどうなる。そろそろ限界だろう」

師範は湯呑みを置いて続けました。「注文という『もの』を、1つの型にせよ。商品名と単価と個数を、離れないように束ねるのだ」

ここからが師範の段です。これまで作ってきたのは手続きでした。ここで作るのは型です。

カプセル化

束ねるだけなら、フィールドを3つ並べれば済みます。ただしそれを外から自由に書き換えられると、個数が -5 の注文や、単価が 0 の注文が、いつのまにか混ざります。

そこでフィールドは private にして外から触れなくし、値を取り出す口だけ getName のような getter として開けます。データを守り、必要な操作だけを外に見せる。この考え方をカプセル化と呼びます。

完成条件

Order クラスを作り、Main から使ってください。

Order クラスの中身は次のとおりです。

  • フィールドは name(商品名・String)、price(単価・int)、quantity(個数・int)の3つ。すべて private にします
  • コンストラクタ Order(String name, int price, int quantity) で3つを受け取ります
  • getter は getName()、getPrice()、getQuantity() の3つ。それぞれフィールドの値を返します
  • getSubtotal() は単価 × 個数の小計を int で返します

そのうえで、Main に public static String orderLine(String name, int price, int quantity) を定義してください。受け取った3つで Order を1つ作り、getter と getSubtotal() を使って 珈琲 x3 = 1350円 の形の文字列を返します。

フィールドを直接読んで文字列を組み立てず、必ず getter を通してください。Main から private フィールドが見えないことを、自分の手で確かめるのが今回の課題です。

クラスは1つのファイルにまとめます。public class Main の外側に class Order を並べて書いてください。Order のほうに public を付けないのがこつです。

進め方

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

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

コンストラクタの引数名をフィールド名と同じにすると、そのままでは引数のほうが優先されて代入が空回りします。this.name = name; の this. が、そこを区別するための印です。

要件

  1. Order クラスを定義し、name・price・quantity の3つのフィールドをすべて private にすること
  2. コンストラクタ Order(String name, int price, int quantity) で3つの値を受け取ること
  3. getName()・getPrice()・getQuantity() の3つの getter を用意すること
  4. getSubtotal() は単価×個数の小計を int で返すこと
  5. Main の orderLine(String name, int price, int quantity) は Order を1つ作ること
  6. 文字列は getter と getSubtotal を通して組み立て、フィールドを直接読まないこと
  7. 返す文字列の形は「珈琲 x3 = 1350円」であること
  8. Order クラスは public を付けず、Main と同じファイルに並べて書くこと

入出力例

orderLine("珈琲", 450, 3) → "珈琲 x3 = 1350円" orderLine("抹茶ラテ", 520, 1) → "抹茶ラテ x1 = 520円" orderLine("シフォンケーキ", 680, 2) → "シフォンケーキ x2 = 1360円" orderLine("本日のブレンド", 400, 12) → "本日のブレンド x12 = 4800円" orderLine("珈琲", 450, 0) → "珈琲 x0 = 0円"

ヒント

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

①方針 先に Order クラスだけを書き上げます。フィールド、コンストラクタ、getter、小計メソッドの順に並べると迷いません。orderLine は new で Order を1つ作り、getter を呼んで文字列にするだけの短いメソッドになります

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

関連レッスン

  • 総合 レジアプリ一気通貫

    注文受付からレシート、集計、売れ筋まで1つにまとめます。10問で作った道具を全部使います。

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

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

  • カウンタ数を保持して増減する典型 UI
  • 配列サイズ固定の同型データの集まり
  • カプセル化フィールドを private にし getter/setter で守る設計
  • フィールドクラスが持つデータ
  • クラスデータと振る舞いを束ねる単位
  • コンストラクタインスタンス生成時の初期化処理
  • 引数位置引数=順番で渡す。
main.java
学習モード
エディタを読み込んでいます

メモ

Order クラスを設計せよ

⌘S で保存