■小テスト類似問題 - 1
シューティングゲームを作成するために,ゲームに登場する「飛行機」を表す Ship というクラスを考えたい。 void print( ) { System.out.println( "x 座標は " + x + ", y座標は " + y + ", ライフは " + life ); }・次の様な処理を行う main メソッド。 まず,自機に関する処理として次の(1)〜(4)を行う。 (1) 自機を表す Ship 型オブジェクト myShip を生成する。その際,「コンストラクタその2」を呼び出して X座標・Y座標・ライフをそれぞれ 10, 10, 20 に初期化すること。 (2) Ship 型オブジェクト myShip の move( ) メソッドを呼び出し,myShip オブジェクトの座標をX方向に -5, Y座標をY方向に 5 だけ進める。 (3) Ship 型オブジェクト myShip の print( ) メソッドを呼び出し,myShip オブジェクトの座標とライフを表示する。 (4) Shipクラスの numOfShip の値を表示して,現時点で生成されている Ship 型オブジェクトの総数を表示する。 同様に, 敵機に関する処理として次の(5)〜(8)を行う。 (5) 敵機を表す Ship 型オブジェクト enemyShip を生成する。その際,「コンストラクタその2」を呼び出して X座標・Y座標・ライフをそれぞれ 20, 30, 50 に初期化すること。 (6) Ship 型オブジェクト enemyShip の move( ) メソッドを呼び出し,enemyShip オブジェクトの座標をX方向に 2, Y座標をY方向に 3 だけ進める。 (7) Ship 型オブジェクト enemyShip の print( ) メソッドを呼び出し,enemyShip オブジェクトの座標とライフを表示する。 (8) Shipクラスの numOfShip の値を表示して,現時点で生成されている Ship 型オブジェクトの総数を表示する。 |
解答例:
class Ship { static int numOfShip = 0; // 生成された Ship 型オブジェクトの総数を表す static フィールド int x, y; // 座標 int life = 0; // ライフ Ship( int x, int y ) { // コンストラクタその1。座標を初期化し,numOfShip の値を1増やす。 this.x = x; this.y = y; numOfShip++; } Ship( int x, int y, int life ) { // コンストラクタその2。コンストラクタ1を呼び出して座標を初期化し,ライフも初期化する。 this( x, y ); // 他のコンストラクタを this() として呼び出せる。ここでは,「コンストラクタその1」を呼び出している。 this.life = life; } void move( int dx, int dy ) { // 移動するメソッド move( ) x = x + dx; y = y + dy; } void print( ) { // この Ship型オブジェクトの座標とライフを表示するメソッド print( ) System.out.println( "x 座標は " + x + ", y座標は " + y + ", ライフは " + life ); } public static void main( String args[] ) { Ship myShip = new Ship( 10, 10, 20 ); // (1) myShip.move( -5, 5 ); // (2) myShip.print(); // (3) System.out.println( "今まで生成された Ship 型オブジェクトの総数は " + Ship.numOfShip ); // (4) Ship enemyShip = new Ship( 20, 30, 50 ); // (5) enemyShip.move( 2, 3 ); // (6) enemyShip.print(); // (7) System.out.println( "今まで生成された Ship 型オブジェクトの総数は " + Ship.numOfShip ); // (8) } }実行結果の表示:
x 座標は 5, y座標は 15, ライフは 20 今まで生成された Ship 型オブジェクトの総数は 1 x 座標は 22, y座標は 33, ライフは 50 今まで生成された Ship 型オブジェクトの総数は 2