下記のjavaソースコードはクラス型配列を使用してランダムでモンスターを2~5体作成してランダムで行動させてfalseの場合にrun()メソッドを実行した要素にnullを代入してすべてnullになったら終了するコードなのですが,このコードの実行例としてはこのような感じです.
ゴブリンAが現れた!
ゴブリンBが現れた!
ゴブリンCが現れた!
ウォーウルフAが現れた!
ゴブリンCナイフで斬りつける
ゴブリンAはトコトコ逃げた!
ゴブリンCはトコトコ逃げた!
ゴブリンBはトコトコ逃げた!
ウォーウルフAはトコトコ逃げた!
本来ならこの続きにすべてのモンスターは消えた!と表示されるはずなのですが,ここで止まってしまいます
原因を教えてください.お願いします
java
1コード 2```public class Task43 { 3 4 public static void main(String[] args) { 5 // 発生させるモンスターの数を2〜5の範囲で生成する 6 int r = 0; 7 Random random = new Random(); 8 while(r < 2){ 9 r = random.nextInt(5); 10 } 11 // 生成するモンスターを格納する配列を作成 12 Monster[] monsters = new Monster[r]; 13 int[] cnt = {0,0,0}; 14 // モンスターをランダムに生成 15 for(int i = 0;i < r;i++){ 16 int m = random.nextInt(2); 17 if(m == 0) { 18 monsters[i] = new Goblin((char)(65 + cnt[0])); 19 cnt[0]++; 20 } 21 else if(m == 1){ 22 monsters[i] = new WarWolf((char)(65 + cnt[1])); 23 cnt[1]++; 24 } 25 else{ 26 monsters[i] = new DeathBat((char)(65 + cnt[2])); 27 cnt[2]++; 28 } 29 } 30 // 生成したモンスターを表示 31 showMonsters(monsters); 32 33 // モンスターがランダムに行動 34 do{ 35 if(monsters != null){ 36 int i = random.nextInt(monsters.length); 37 boolean f = random.nextBoolean(); 38 if((f)&&(monsters[i] != null)){ 39 monsters[i].attack(); 40 } 41 else if((!f)&&(monsters[i] != null)){ 42 monsters[i].run(); 43 monsters[i] = null; 44 } 45 } 46 47 }while(monsters != null); 48 // 全てのモンスターが逃げ出したら表示 49 System.out.println("\nモンスターは全て逃げ出した!"); 50 } 51 52 /** 53 * モンスターの一覧を表示するクラスメソッド 54 55 */ 56 private static void showMonsters(Monster[] monsters) { 57 for(int i = 0;i < monsters.length;i++){ 58 System.out.println(monsters[i] + "が現れた!\n"); 59 } 60 } 61}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。