前提・実現したいこと
RPGでスライムと会敵したときに、ScannerのnextIntを使って数字でその後の行動を受け付けたい。
発生している問題・エラーメッセージ
質問のタイトルにもあるようにScanner#nextInt(書き方あってるかわからない)を使った時に入力をしていないにも関わらずNoSuchElementExceptionが発生します。
-----Enemy's Info----- Name: スライム HP: 10 Strength: 1 Vitality: 1 Dexterity: 1 Agility: 1 ---------------------- 0. 攻撃 1. 防御 2. 道具 3. 逃げる Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) 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 player.EnemyCount.count(EnemyCount.java:26) at hajimari.Spawn.first(Spawn.java:11) at core.RPGCore.main(RPGCore.java:14)
該当のソースコード
EnemyCount.java
package player; import java.util.Scanner; import entities.Slime; import entity.Attack; import entity.Defence; import entity.Escape; import entity.Inventory; public class EnemyCount { public static void count(String name) { System.out.println("-----Enemy's Info-----"); Slime.getInfo(); System.out.println("----------------------"); System.out.println("0. 攻撃"); System.out.println("1. 防御"); System.out.println("2. 道具"); System.out.println("3. 逃げる"); Scanner sc = null; try{ sc = new Scanner(System.in); int data = sc.nextInt(); switch(data){ case 0: Attack.player(); break; case 1: Defence.player(); break; case 2: Inventory.player(); break; case 3: Escape.player(); break; default: System.out.println("デバッグ: events.player.EnemyCountで不正な入力"); break; } } catch(NullPointerException e){ System.out.println("デバッグ: Error at events.player.EnemyCount(" + e + ")"); } finally { if(sc != null) sc.close(); } System.out.println("end"); } }
Slime.java
package entities; public class Slime { public static String Name = "スライム"; static int HP = 10; static int Strength = 1; static int Vitality = 1; static int Dexterity = 1; static int Agility = 1; public static void getInfo(){ System.out.println("Name: " + Name); System.out.println("HP: " + HP); System.out.println("Strength: " + Strength); System.out.println("Vitality: " + Vitality); System.out.println("Dexterity: " + Dexterity); System.out.println("Agility: " + Agility); } }
Attack.player()などの○○.player()は、
Attack.player()であればSystem.out.println("attacked");を実行するだけです.
試したこと
NoSuchElementExceptionが何故出るのかと思い、Googleで検索してみましたが、解決方法を見つけることはできませんでした。
補足情報
Eclipse4.6 Neon日本語版を使用しています。
初心者中の初心者ですので、私の質問で不足しているところがあればご指摘のほどよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー