JAVA Scannerのインスタンス化について

実現したいこと

解決したいこと

下記プログラムの内容で
Scanner scan = new Scanner(System.in); を一つだけインスタンス化して使用すると
エラーが発生します。

Scanner scan = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
Scanner scan3 = new Scanner(System.in);

上記のようにHero,Majician,Monsterそれぞれにインスタンス化して使用するとエラーは発生
しませんでした。
Scannerが一つの場合なぜこのようなエラーが発生するのかがわかりません。
なぜこのようなエラーが発生するのか、またはSccannerを一つだけインスタンス化して実行
するにはどうしたらいいのか。
ご教授お願いいたします。

発生している問題・エラーメッセージ

勇者の「名前」「体力」「攻撃力」「防御力」を入力 test 1 1 1 モンスターの「名前」「体力」「攻撃力」「防御力」を入力 test2                          ←ここでエラーが発生します Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:939) at java.base/java.util.Scanner.next(Scanner.java:1594) at java.base/java.util.Scanner.nextInt(Scanner.java:2258) at java.base/java.util.Scanner.nextInt(Scanner.java:2212) at Story.input(Story.java:41) at Story.main(Story.java:18)

該当のソースコード

java

1import java.util.Scanner;2 3public class Story {4 5 public static void main(String[] args) {6 7 //標準入力8 Scanner scan = new Scanner(System.in);9 10 //ヒーロー11 Here h = new Here();12 input(h,scan);13 14 //モンスター15 Monster m = new Monster();16 input(m,scan);17 18 //マジシャン19 Magician ma = new Magician();20 input(ma,scan); 21 }22 23 public static void input(Here h,Scanner scan) {24 System.out.println("勇者の「名前」「体力」「攻撃力」「防御力」を入力");25 h.setName(scan.nextLine());26 h.setHp(scan.nextInt());27 h.setAt(scan.nextInt());28 h.setDf(scan.nextInt());29 }30 31 public static void input(Monster m,Scanner scan) {32 System.out.println("モンスターの「名前」「体力」「攻撃力」「防御力」を入力");33 m.setName(scan.nextLine());34 m.setHp(scan.nextInt());35 m.setAt(scan.nextInt());36 m.setDf(scan.nextInt());37 }38 39 public static void input(Magician ma,Scanner scan) {40 System.out.println("魔法使いの「名前」「体力」「MP」を入力");41 ma.setName(scan.nextLine());42 ma.setHp(scan.nextInt());43 ma.setMp(scan.nextInt());44 }45}

試したこと

Scanner scan = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
Scanner scan3 = new Scanner(System.in);
とした場合はエラーなく実行されました。

コメントを投稿

0 コメント