条件に従ってフィールドを初期化したいです。
まず引数が二つのコンストラクタ(コンストラクタ②)を以下の通りに用意します。
java
1Monster2(String tr, String nm){ 2 this.character = "unknown"; 3 this.trainer = tr; 4 this.name = nm; 5 this.lv = 1; 6 this.hp = 15; 7}
そして次に引数が3つのコンストラクタ(コンストラクタ③)を作成します。このコンストラクタでは最初のレベル(initial_lv)が1か2以上かで場合分けしてフィールドを初期化したいです。最初のレベルが1以上の場合はコンストラクタ②と同じにし、最初のレベルが2以上の場合はlvとhpにはlevelUpメソッドを利用して値に見合った数値を代入したいです。以下にlevelUpメソッドと、わたしが思うコンストラクタ③を記します
java
1//levelUpメソッド 2public void levelUp(int lv_up){ 3 lv = lv+lv_up; 4 hp = hp+lv_up*15; 5}
java
1//コンストラクタ③ 2Monster2(String tr, String nm, int initial_lv){ 3 if(initial_lv=1){ 4 this(tr,nm); 5 }else if(initial_lv>2){ 6 this(tr,nm); 7 levelUp(initial_lv-1); 8 } 9}
【具体的にやりたいこと】
コンストラクタ③において、
もし最初のレベルが1のときは、フィールドには以下の値を設定し
this.character = "unknown";
this.trainer = tr;
this.name = nm;
this.lv = 1;
this.hp = 15;
もし最初のレベルが2以上(例えば3)の時は、フィールドには以下の値を設定できるようにしたいです
this.character = "unknown";
this.trainer = tr;
this.name = nm;
this.lv = 3;
this.hp = 45;
【疑問点】
コンストラクタ③内でlevelUpメソッドをインスタンス化せずに使っていますが、大丈夫なのでしょうか?
また、hpとlv以外はコンストラクタ②と同じ結果にしたいのでコンストラクタ②を呼び出すためにthis(tr,nm)としていますが、これもあっているか不安です。
コンストラクタ③をどのように書けば【具体的にやりたいこと】を達成できるのでしょうか
どなたかご教授お願いいたします!!
回答2件
あなたの回答
tips
プレビュー