前提・実現したいこと
プログラム暦一ヶ月の初心者です。
JavaのCUIで動くローグライクもどきのゲームを作っています。
選択肢を数字で選んでもらうようにしているのですが、文字列が入ったときに「やりなおしてください」のような処理をするようなコードを書きました。以下そのコード
java
1 public static int test() { 2 int test= 0; 3 boolean a = true; 4 while (a == true) { 5 String str = new Scanner(System.in).nextLine(); 6 try { 7 test= Integer.parseInt(str); 8 a = false; 9 } catch (NumberFormatException e) { 10 System.out.println("数字を入力してください"); 11 } 12 } 13 return test; 14 }
発生している問題・エラーメッセージ
しかし、一回目は文字列を打っても上手くいくのですが、さらに1~4でないときにもう一回入力してもらうとき(二回目)に文字列を打つとエラーが出ます↓
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at MysteryDungeon.Battle.BattleManager(Battle.java:45)
at MysteryDungeon.Process.Floor(Process.java:45)
at MysteryDungeon.Process.Start(Process.java:27)
at MysteryDungeon.MysteryDungeon.main(MysteryDungeon.java:34)
一回目はちゃんと動くのに二回目でエラーが出る理由が分かりません。理由(初心者でも理解できるなら)と解決法をお教えいただけると幸いです
java
1public static void BattleManager(Hero h, Monster m){ 2 int b = 0; 3 int Action = 0; 4 while(h.HP>0 && m.HP>0){ 5 System.out.println("行動を数字で選んでください。"); 6 b = 0; 7 while(b == 0) { 8 System.out.println("☆1.たたかう 2.アイテム 3.装備 4.にげる☆"); 9 Action = test(); //一回目 10 if (Action>0 && Action<5){ 11 b = 1; 12 } else { 13 boolean c = true; 14 while(c == true){ 15 System.out.println(); 16 System.out.println("1~4の中から選んでください"); 17 Action = test(); //二回目 18 if (Action>0 && Action<5){ 19 c = false; 20 } 21 } 22 } 23 if(Action==1) { 24 } else { 25 System.out.println("実装されていません"); 26 b = 0; 27 } 28 } 29 if (Action==1) { 30 h.attack(m); //Heroのattackメソッド呼び出し 31 } 32 if (m.HP>0) { 33 m.attack(h); //Monsterのattackメソッド呼び出し 34 } 35 36 } 37}
##追記
nextIntを使用しているFloorメソッド(BattleManagerの呼び出し元)のソースです
java
1 public static void Floor(Hero h) { 2 ++FloorCount; 3 int d= 0; 4 for(int i=0; i<5; i++) { 5 d= new SecureRandom().nextInt(100); 6 if(d<(50-i*10)) { 7 Slime slime = new Slime(); 8 Battle.BattleManager(h,slime); 9 } else if (d>79+(i*10)) { 10 Drakee drakee = new Drakee(); 11 Battle.BattleManager(h,drakee); 12 } else { 13 BigSlug bigSlug = new BigSlug(); 14 Battle.BattleManager(h,bigSlug); 15 } 16 } 17 }
回答1件
あなたの回答
tips
プレビュー