お題
一般クラスGunとアプリケーションクラスGunAppを作成し、以下の処理を実現する。
実行例
実行例の中の
———->
は弾丸を発射している様子を表している。
---------->
[P38, ***********_]
---------->
[P38, **********__]
---------->
---------->
---------->
---------->
---------->
---------->
弾切れだ!
弾切れだ!
弾切れだ!
弾切れだ!
[44マグナム, ______]
6発装弾しました。
[44マグナム, ******]
手順
◯新規ファイルGunApp.javaを作成する。内容は以下
public class GunApp {
public static void main(String[] args) {
}
}
◯GunAppクラスの下にGunクラスを作成する。記述は以下
public class GunApp {
public static void main(String[] args) {
}
}
class Gun{
}
以下はGunクラスに記述していくこと
◯フィールド変数
ガンの名前 String name;
ガンの最大装弾数 int maxBullet;
現在の装弾数 int bullet;
◯コンストラクタ
1. 引数2つのコンストラクタ -> String name と int maxBulletを引数に受取
this.nameとthis.maxBullettとthis.bulletを初期化する。この際、this.bulletはmaxBulletと同じにすること
2.引数なしのコンストラクタ->名前をP38 最大装弾数12,装弾数12で初期化する。この際、1のコンストラクタを呼び出すようにすること
◯メソッド(メソッドの挙動は実行例を参考にすること)
void shot() 弾を発射する。ただし、弾がないときは[弾切れだ!]と表示する
void loading(int bullet) 引数の数だけ装弾数を増やす。最大装弾数を超える場合は最大装弾数とする。
void displayInfo() 現在のガンの情報を表示する。
インスタンスの作成
◯上部にあるmainメソッドの中でGunクラスのインスタンスを引数なしで作成し、Gun型の変数g1に代入する
◯g1がshot()する
◯g1がdisplayInfo()を行う
◯g1がshot()する
◯g1がdisplayInfo()を行う
◯Gunクラスのインスタンスを[名前を44マグナム,最大装填数を6]で作成し、Gun型変数g2に代入する。
◯10回まわるforループを作成し、その中でg2がshot()する
◯g2がdisplayInfo()する
◯g2がloading(10)する
◯g2がdisplayInfo()する
解答例
public class GunApp {
public static void main(String[] args) {
Gun g1 = new Gun();
g1.shot();
g1.displayInfo();
g1.shot();
g1.displayInfo();
Gun g2 = new Gun("44マグナム",6);
for(int i=0;i<10;i++){
g2.shot();
}
g2.displayInfo();
g2.loading(10);
g2.displayInfo();
}
}
class Gun{
//フィールド
String name;
int maxBullet;
int bullet;
//コンストラクタ
Gun(){
this("P38",12);
}
Gun(String name,int maxBullet){
this.name = name;
this.maxBullet = maxBullet;
this.bullet = maxBullet;
}
//メソッド
void shot(){
if(this.bullet == 0){
System.out.println("弾切れだ!");
return;
}
this.bullet--;
System.out.println("---------->");
}
void loading(int bullet){
int loaded =
Math.min(this.maxBullet-this.bullet,bullet);
this.bullet += loaded;
System.out.printf("%d発装弾しました。%n",loaded);
}
void displayInfo(){
System.out.printf("[%s, ",this.name);
for(int i =0;i<this.maxBullet;i++){
if( i < this.bullet){
System.out.print("*");
}else{
System.out.print("_");
}
}
System.out.println("]");
}
}
コメント