9.4 KiB
Question10 - インスタンスとクラス
本資料の練習問題は、複数のプログラミング言語(Java / C# / PHP / Python)で共通して利用できるよう記述されています。静的型付け・動的型付けの違いや文字列の連結ルールなど、言語固有の文法仕様に基づき、問題文の表現をご使用の言語の仕様に適宜読み替えて進めてください。
この問題のねらい
- クラスから作られたインスタンス(実体)を変数に代入し、そのフィールド(保持しているデータ)に値を読み書きできること
- インスタンスが持つメソッド(処理)を呼び出せること
- 与えられた仕様のとおりに、自分でクラス(フィールドとメソッドの組み合わせ)を作成できること
- 同じ型の複数のインスタンスを配列(一覧)にまとめて扱い、繰り返し処理でそれぞれに同じ処理を行えること
以下の設問はそれぞれ独立したプログラムとして実装してください。ただし、設問5で作成するクラスは設問6・設問8でも使用します。
設問1
次の仕様を満たすクラスを作成してください。
- クラス名:
User - フィールド
id: 整数name: 文字列
- メソッド
printProfile(引数なし、戻り値なし):IDとidフィールドの値と:とnameフィールドの値をつなげて画面に出力する
その上で、このプログラムでは、User 型の変数 user を宣言し、User のインスタンスを代入したうえで、次を行ってください。
userのidフィールドに1000を代入するuserのnameフィールドに山田太郎を代入するuserのidフィールドの値をそのまま出力するuserのnameフィールドの値をそのまま出力する
- 出力(2行):
1000山田太郎
設問2
設問1と同じ User クラスを使用します(内容は設問1を参照)。
User 型の変数 user を宣言し、User のインスタンスを代入したうえで、次を行ってください。
userのidフィールドに2000を代入するuserのnameフィールドに佐藤二郎を代入するuserのprintProfileメソッドを呼び出す
- 出力:
ID2000:佐藤二郎
設問3
次の仕様を満たすクラスを新しく作成してください。
- クラス名:
Student - フィールド
studentId: 整数name: 文字列mail: 文字列password: 文字列
- メソッド: なし
その上で、このプログラムから、Student 型の変数 student を宣言し、Student のインスタンスを代入したうえで、次を行ってください。
studentのstudentIdフィールドに10を代入するstudentのnameフィールドに田中二郎を代入するstudentのmailフィールドにtest@mail.comを代入するstudentのpasswordフィールドにpassを代入するstudentの4つのフィールド(studentId、name、mail、password)の値を、それぞれ出力する
- 出力(4行、各フィールドの値がそれぞれ出力されればよい):
10田中二郎test@mail.compass
設問4
次の仕様を満たすクラスを新しく作成してください。
- クラス名:
Calculation - フィールド
baseNum: 整数
- メソッド
add(引数: 整数num、戻り値なし): フィールドbaseNumに引数numの値を加算する
その上で、このプログラムから、Calculation 型の変数 cal を宣言し、Calculation のインスタンスを代入したうえで、次を行ってください。
calのbaseNumフィールドに100を代入するcalのaddメソッドを、引数に100を渡して呼び出すcalのbaseNumフィールドの値を出力する
- 出力:
200
設問5
次の仕様を満たすクラスを新しく作成してください。
- クラス名:
Car - フィールド
color: 文字列gasoline: 整数
- メソッド
run(引数なし、戻り値: 整数)- 処理1:
gasolineフィールドの値を1減らす - 処理2: 減算後の
gasolineフィールドの値が負の数になっていない場合は、1〜15のいずれかのランダムな整数(車が進んだ距離)を戻り値として返す - 処理3: 減算後の
gasolineフィールドの値が負の数になった場合(これ以上車が進めないことを表す)は、-1を戻り値として返す
- 処理1:
その上で、このプログラムから、Car 型の変数 car を宣言し、Car のインスタンスを代入したうえで、次を行ってください。
carのcolorフィールドに赤を代入するcarのgasolineフィールドに50を代入するcarのrunメソッドを1回実行する「x色の車はy進みました」(xはcarのcolorフィールドの値、yは3.でrunメソッドが返した値)という形式で画面に出力するcarのgasolineフィールドの値を出力する(49が出力されれば正解)
- 出力例(1行目のyの値は、乱数のため実行のたびに変わってよい):
赤色の車は8進みました49
設問6
設問5で作成した Car クラスを使用します(内容は設問5を参照)。
Car 型の変数 car を宣言し、Car のインスタンスを代入したうえで、次を行ってください。
carのcolorフィールドに赤を代入するcarのgasolineフィールドに50を代入する- 目的地までの距離を表す値として
300を用意する carのrunメソッドを繰り返し使って、目的地まで進める- 途中でガソリンがなくなり、目的地に到達できなかった場合は、
「x色の車は目的地に到達できませんでした」(xはcarのcolorフィールドの値)と出力する - 目的地に到達できた場合は、
「x色の車は目的地にまでy時間かかりました。残りのガソリンは、zリットルです」(xはcarのcolorフィールドの値、yはrunメソッドを実行した回数、zは残っているgasolineフィールドの値)と出力する
- 途中でガソリンがなくなり、目的地に到達できなかった場合は、
- 期待される結果: 実行結果に応じて、上記いずれかの文言が1回出力される
設問7
設問1と同じ User クラスを使用します(内容は設問1を参照)。
このプログラムでは、次を行ってください。
User型の値を3つ格納できる配列userListを宣言し、確保するUser型のインスタンスを3つ作成し、それぞれuser1、user2、user3という名前の変数に代入する- 作成した3つのインスタンスのフィールドに、それぞれ次の値を代入する
user1:idフィールドに1、nameフィールドに一郎user2:idフィールドに2、nameフィールドに二郎user3:idフィールドに3、nameフィールドに三郎
userListに、作成したuser1、user2、user3を追加する- 繰り返し処理を使って
userListの中身を順番に取り出し、それぞれのprintProfileメソッドを実行する
- 出力(3行):
ID1:一郎ID2:二郎ID3:三郎
設問8
設問5で作成した Car クラスを使用します(内容は設問5を参照)。
このプログラムでは、次を行ってください。
Car型のインスタンスを3件作成し、それぞれ次のようにcolorフィールド・gasolineフィールドを設定する- 1台目:
colorフィールドに赤、gasolineフィールドに50 - 2台目:
colorフィールドに青、gasolineフィールドに60 - 3台目:
colorフィールドに黄、gasolineフィールドに70
- 1台目:
- 作成した3件のインスタンスを、配列(一覧)にまとめる
- 目的地までの距離を表す値として
300を用意する - 2.で用意した配列(一覧)に対する繰り返し処理を使って、それぞれの
carインスタンスについてrunメソッドを繰り返し使い、目的地まで進める(1件ずつ個別の変数に対して同じ処理を3回書く方法ではなく、配列に対する繰り返し処理として実装すること)- 途中でガソリンがなくなり、目的地に到達できなかった場合は、
「x色の車は、目的地に到達できませんでした」(xはそのインスタンスのcolorフィールドの値)と出力する - 目的地に到達できた場合は、
「x色の車は、目的地にまでy時間かかりました。残りのガソリンは、zリットルです」(xはそのインスタンスのcolorフィールドの値、yはrunメソッドを実行した回数、zは残っているgasolineフィールドの値)と出力する
- 途中でガソリンがなくなり、目的地に到達できなかった場合は、
- 期待される結果: 3件の
Carインスタンスそれぞれについて、上記いずれかの文言が1回ずつ出力される(合計3行)