Files
question-java/Question10-InstanceAndClass/仕様.md
2026-10-05 11:23:25 +09:00

9.4 KiB
Raw Blame History

Question10 - インスタンスとクラス

本資料の練習問題は、複数のプログラミング言語(Java / C# / PHP / Python)で共通して利用できるよう記述されています。静的型付け・動的型付けの違いや文字列の連結ルールなど、言語固有の文法仕様に基づき、問題文の表現をご使用の言語の仕様に適宜読み替えて進めてください。

この問題のねらい

  • クラスから作られたインスタンス(実体)を変数に代入し、そのフィールド(保持しているデータ)に値を読み書きできること
  • インスタンスが持つメソッド(処理)を呼び出せること
  • 与えられた仕様のとおりに、自分でクラス(フィールドとメソッドの組み合わせ)を作成できること
  • 同じ型の複数のインスタンスを配列(一覧)にまとめて扱い、繰り返し処理でそれぞれに同じ処理を行えること

以下の設問はそれぞれ独立したプログラムとして実装してください。ただし、設問5で作成するクラスは設問6・設問8でも使用します。


設問1

次の仕様を満たすクラスを作成してください。

  • クラス名: User
  • フィールド
    • id: 整数
    • name: 文字列
  • メソッド
    • printProfile(引数なし、戻り値なし): ID と id フィールドの値と : と name フィールドの値をつなげて画面に出力する

その上で、このプログラムでは、User 型の変数 user を宣言し、User のインスタンスを代入したうえで、次を行ってください。

  1. user の id フィールドに 1000 を代入する
  2. user の name フィールドに 山田太郎 を代入する
  3. user の id フィールドの値をそのまま出力する
  4. user の name フィールドの値をそのまま出力する
  • 出力(2行):
    • 1000
    • 山田太郎

設問2

設問1と同じ User クラスを使用します(内容は設問1を参照)。

User 型の変数 user を宣言し、User のインスタンスを代入したうえで、次を行ってください。

  1. user の id フィールドに 2000 を代入する
  2. user の name フィールドに 佐藤二郎 を代入する
  3. user の printProfile メソッドを呼び出す
  • 出力: ID2000:佐藤二郎

設問3

次の仕様を満たすクラスを新しく作成してください。

  • クラス名: Student
  • フィールド
    • studentId: 整数
    • name: 文字列
    • mail: 文字列
    • password: 文字列
  • メソッド: なし

その上で、このプログラムから、Student 型の変数 student を宣言し、Student のインスタンスを代入したうえで、次を行ってください。

  1. student の studentId フィールドに 10 を代入する
  2. student の name フィールドに 田中二郎 を代入する
  3. student の mail フィールドに test@mail.com を代入する
  4. student の password フィールドに pass を代入する
  5. student の4つのフィールド(studentId、name、mail、password)の値を、それぞれ出力する
  • 出力(4行、各フィールドの値がそれぞれ出力されればよい):
    • 10
    • 田中二郎
    • test@mail.com
    • pass

設問4

次の仕様を満たすクラスを新しく作成してください。

  • クラス名: Calculation
  • フィールド
    • baseNum: 整数
  • メソッド
    • add(引数: 整数 num、戻り値なし): フィールド baseNum に引数 num の値を加算する

その上で、このプログラムから、Calculation 型の変数 cal を宣言し、Calculation のインスタンスを代入したうえで、次を行ってください。

  1. cal の baseNum フィールドに 100 を代入する
  2. cal の add メソッドを、引数に 100 を渡して呼び出す
  3. cal の baseNum フィールドの値を出力する
  • 出力: 200

設問5

次の仕様を満たすクラスを新しく作成してください。

  • クラス名: Car
  • フィールド
    • color: 文字列
    • gasoline: 整数
  • メソッド
    • run(引数なし、戻り値: 整数)
      • 処理1: gasoline フィールドの値を1減らす
      • 処理2: 減算後の gasoline フィールドの値が負の数になっていない場合は、1〜15のいずれかのランダムな整数(車が進んだ距離)を戻り値として返す
      • 処理3: 減算後の gasoline フィールドの値が負の数になった場合(これ以上車が進めないことを表す)は、-1 を戻り値として返す

その上で、このプログラムから、Car 型の変数 car を宣言し、Car のインスタンスを代入したうえで、次を行ってください。

  1. car の color フィールドに 赤 を代入する
  2. car の gasoline フィールドに 50 を代入する
  3. car の run メソッドを1回実行する
  4. 「x色の車はy進みました」(xは car の color フィールドの値、yは3.で run メソッドが返した値)という形式で画面に出力する
  5. car の gasoline フィールドの値を出力する(49 が出力されれば正解)
  • 出力例(1行目のyの値は、乱数のため実行のたびに変わってよい):
    • 赤色の車は8進みました
    • 49

設問6

設問5で作成した Car クラスを使用します(内容は設問5を参照)。

Car 型の変数 car を宣言し、Car のインスタンスを代入したうえで、次を行ってください。

  1. car の color フィールドに 赤 を代入する
  2. car の gasoline フィールドに 50 を代入する
  3. 目的地までの距離を表す値として 300 を用意する
  4. car の run メソッドを繰り返し使って、目的地まで進める
    • 途中でガソリンがなくなり、目的地に到達できなかった場合は、「x色の車は目的地に到達できませんでした」(xは car の color フィールドの値)と出力する
    • 目的地に到達できた場合は、「x色の車は目的地にまでy時間かかりました。残りのガソリンは、zリットルです」(xは car の color フィールドの値、yは run メソッドを実行した回数、zは残っている gasoline フィールドの値)と出力する
  • 期待される結果: 実行結果に応じて、上記いずれかの文言が1回出力される

設問7

設問1と同じ User クラスを使用します(内容は設問1を参照)。

このプログラムでは、次を行ってください。

  1. User 型の値を3つ格納できる配列 userList を宣言し、確保する
  2. User 型のインスタンスを3つ作成し、それぞれ user1、user2、user3 という名前の変数に代入する
  3. 作成した3つのインスタンスのフィールドに、それぞれ次の値を代入する
    • user1: id フィールドに 1、name フィールドに 一郎
    • user2: id フィールドに 2、name フィールドに 二郎
    • user3: id フィールドに 3、name フィールドに 三郎
  4. userList に、作成した user1、user2、user3 を追加する
  5. 繰り返し処理を使って userList の中身を順番に取り出し、それぞれの printProfile メソッドを実行する
  • 出力(3行):
    • ID1:一郎
    • ID2:二郎
    • ID3:三郎

設問8

設問5で作成した Car クラスを使用します(内容は設問5を参照)。

このプログラムでは、次を行ってください。

  1. Car 型のインスタンスを3件作成し、それぞれ次のように color フィールド・gasoline フィールドを設定する
    • 1台目: color フィールドに 赤、gasoline フィールドに 50
    • 2台目: color フィールドに 青、gasoline フィールドに 60
    • 3台目: color フィールドに 黄、gasoline フィールドに 70
  2. 作成した3件のインスタンスを、配列(一覧)にまとめる
  3. 目的地までの距離を表す値として 300 を用意する
  4. 2.で用意した配列(一覧)に対する繰り返し処理を使って、それぞれの car インスタンスについて run メソッドを繰り返し使い、目的地まで進める(1件ずつ個別の変数に対して同じ処理を3回書く方法ではなく、配列に対する繰り返し処理として実装すること)
    • 途中でガソリンがなくなり、目的地に到達できなかった場合は、「x色の車は、目的地に到達できませんでした」(xはそのインスタンスの color フィールドの値)と出力する
    • 目的地に到達できた場合は、「x色の車は、目的地にまでy時間かかりました。残りのガソリンは、zリットルです」(xはそのインスタンスの color フィールドの値、yは run メソッドを実行した回数、zは残っている gasoline フィールドの値)と出力する
  • 期待される結果: 3件の Car インスタンスそれぞれについて、上記いずれかの文言が1回ずつ出力される(合計3行)