実現したいこと
vscode内でなぜかscanner.nextIntの入力が飛ばされてしまうことを解決したい
前提
vscodeで遊びながらjavaの勉強をしていて、オブジェクト指向に慣れるために複数のファイルを使って一つのプロジェクトを作成する練習をしていました。
そこで簡単なRPG的なものを作っていたら入力部分が飛ばされてしまい、うまく実行できませんでした。
下記にエラーメッセージと使っていた3つのファイルを載せておきます。
問題となっている入力の部分が分かりやすいようにコメントで補足してあります。
発生している問題・エラーメッセージ
Let's enjoy playing adventure! Input your name in English. testKun At first, testKun should get to a higher level. Let's go to kill weaker enemies than testKun. Current level is 1. Current HP is 10. Skills that you can use now are hit protect runAway sleep You are attacked by mushroom monster. Let's fight! Exception in thread "main" java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:945) at java.base/java.util.Scanner.next(Scanner.java:1602) at java.base/java.util.Scanner.nextInt(Scanner.java:2267) at java.base/java.util.Scanner.nextInt(Scanner.java:2221) at Enemy.fight(Enemy.java:10) at Quest.main(Quest.java:24)
該当のソースコード
java
1import java.util.Scanner; //mainで使ってるファイル 2public class Quest { 3 public static void main(String[] args){ 4 System.out.println("Let's enjoy playing adventure!"); 5 System.out.println("Input your name in English."); 6 Scanner scanner = new Scanner(System.in); 7 String name = scanner.nextLine(); 8 System.out.println("At first, " + name + " should get to a higher level."); 9 System.out.println("Let's go to kill weaker enemies than " + name + "."); 10 String[] wayAttack = new String[4]; 11 wayAttack[0] = "hit"; 12 wayAttack[1] = "protect"; 13 wayAttack[2] = "runAway"; 14 wayAttack[3] = "sleep"; 15 int[] damage = new int[4]; 16 int hp; 17 damage[0] = 5; 18 damage[1] = 0; 19 damage[2] = 0; 20 damage[3] = 0; 21 Hero hero = new Hero(); 22 hp = hero.printStatus(wayAttack); 23 Enemy enemy = new Enemy(); 24 enemy.fight(wayAttack,damage,hp); 25 scanner.close(); 26 } 27}
java
1import java.util.Scanner; 2public class Hero { 3 public int printStatus (String[] wayAttack){ 4 Scanner scanner = new Scanner(System.in); 5 int level = 1,hp = 10,i = 0; 6 System.out.println("Current level is " + level + "."); 7 System.out.println("Current HP is " + hp + "."); 8 System.out.print("Skills that you can use now are "); 9 for(i = 0; i < 4; i++){ 10 if(i!=3) System.out.printf("%s ",wayAttack[i]); 11 else System.out.printf("%s\n",wayAttack[i]); 12 } 13 scanner.close(); 14 return hp; 15 } 16}
java
1import java.util.Scanner; 2 3public class Enemy { 4 public void fight(String[] wayAttack, int[] damage, int hp) { 5 Scanner scanner = new Scanner(System.in); 6 int mashroom = 10, n; 7 System.out.println("You are attacked by mushroom monster."); 8 System.out.println("Let's fight!"); 9 while (hp > 0 && mashroom > 0) { 10 n = scanner.nextInt(); //ここの入力が飛ばされてしまう。 11 System.out.println("You choose " + wayAttack[n] + "."); 12 mashroom -= damage[n]; 13 System.out.println("You are hit by mushroom."); 14 hp -= 2; 15 System.out.println("Enemy's remaining HP is " + mashroom + "."); 16 } 17 if (hp == 0) { 18 System.out.println("Game Over..."); 19 System.out.println("You wake up in the hospital."); 20 } else if (mashroom <= 0) { 21 System.out.println("You defeat the mushroom."); 22 } 23 scanner.close(); 24 } 25} 26
試したこと
chatgpt を使ってみたものの、chatgptにはよくわからなかったみたい
補足情報(FW/ツールのバージョンなど)
openjdk version "21.0.2"
vscode -version "1.87.2"
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/03/20 12:40
2024/03/20 12:46
2024/03/20 12:55
2024/03/20 13:03
2024/03/20 13:08
2024/03/20 13:30
2024/03/20 13:33
2024/03/20 13:40
2024/03/20 14:01