扫描仪问题“ java.util.NoSuchElementException”-扫描仪无法在方法中使用

时间:2019-09-16 06:31:29

标签: java java.util.scanner

我正在尝试为控制台制作一个角色扮演游戏,这是我的第一个项目。

直到现在一切正常,但那里出现了扫描仪问题。在方法fight()中,扫描程序始终会显示一条错误消息,我不理解。

我已经尝试使其成为类变量并多次使用,即使尝试更改变量名称,一切都失败了。

想获得一些帮助,谢谢。

public class RPG {
// CLASS ATTRIBUTES
Player player;

private static Weapon[][] weaponArsenal = new Weapon[4][2];
private static Armor[][] armorArsenal = new Armor[4][2];
private static Enemy[][] enemies = new Enemy[4][2];
private static Skill[] skills = new Skill[7];

//----------------------------------------------------------------------------------------------------------------//

// MAIN
public static void main(String[] args) throws IOException, InterruptedException {
  Scanner scan = new Scanner(System.in);

  // welcome
  System.out.print("Hello Player, welcome to the Console RPG!\nHow can I call you?\n\nUsername:\n>");
  String playerUsername = scan.next();
  // init weapon / armor / skill / enemy
  initWeapon();
  initArmor();
  initSkill();
  initEnemy();

  // init player
  player = new Player(playerUsername, 100, weaponArsenal[0][0], armorArsenal[0][0]);

  // info
  System.out.println("...\n\nThis is a great name, " + player.getName() + "!\n" +
          "You'll get the beginner equipment at first.\n");

  // print info, wait for input clear screen
  player.info();
  waitForEnter();
  clearScreen();

  //----------------------------------------------------------------------------------------------------------------//

  // tutorial
  System.out.println("Let's show you how to play!...\n");
  System.out.println("Your first fight is against " + enemies[0][0].getName() + "!");

  fight(player, enemies[0][0]);


  scan.close();
} // end_main

//----------------------------------------------------------------------------------------------------------------//

// init methods
static void initWeapon(){
  // [rarity][weapon]

  // default
  weaponArsenal[0][0] = new Weapon("Fist", 5, 0);

  // common
  weaponArsenal[1][0] = new Weapon("Dagger (common)", 8, 50);
  weaponArsenal[1][1] = new Weapon("Staff (common)", 12, 80);

  // rare
  weaponArsenal[2][0] = new Weapon("Dagger (rare)", 15, 120);
  weaponArsenal[2][1] = new Weapon("Staff (rare)", 19, 180);

  // epic
  weaponArsenal[3][0] = new Weapon("Dagger (epic)", 20, 210);
  weaponArsenal[3][1] = new Weapon("Staff (epic)", 25, 290);

} // end_initWeapon
static void initArmor(){
  // init armor

  // default
  armorArsenal[0][0] = new Armor("Cloth", 3);

  // common
  armorArsenal[1][0] = new Armor("Leather (common)", 5);
  armorArsenal[1][1] = new Armor("Bronze (common)", 8);

  // rare
  armorArsenal[2][0] = new Armor("Leather (rare)", 10);
  armorArsenal[2][1] = new Armor("Bronze (rare)", 13);

  // epic
  armorArsenal[3][0] = new Armor("Leather (epic)", 15);
  armorArsenal[3][1] = new Armor("Bronze (epic)", 20);
} // end_initArmor

static void initSkill(){

} // end init_Skill
static void initEnemy(){
  // enemies[difficulity][level]

  // baby
  enemies[0][0] = new Enemy("Goblin Baby", 100, weaponArsenal[0][0], armorArsenal[0][0], 5);
  enemies[0][1] = new Enemy("Orc Baby", 120, weaponArsenal[1][0], armorArsenal[1][0], 10);

  // normal
  enemies[1][0] = new Enemy("Goblin Normal", 130, weaponArsenal[0][0], armorArsenal[0][0], 10);
  enemies[1][1] = new Enemy("Orc Normal", 150, weaponArsenal[1][0], armorArsenal[1][0], 15);

  // hard
  enemies[2][0] = new Enemy("Goblin Hard", 160, weaponArsenal[0][0], armorArsenal[0][0], 15);
  enemies[2][1] = new Enemy("Orc Normal", 180, weaponArsenal[1][0], armorArsenal[1][0], 20);

  // extreme
  enemies[3][0] = new Enemy("Goblin Extreme", 190, weaponArsenal[0][0], armorArsenal[0][0], 20);
  enemies[3][1] = new Enemy("Orc Normal", 220, weaponArsenal[1][0], armorArsenal[1][0], 25);

} // end_initEnemy

//----------------------------------------------------------------------------------------------------------------//

// other methods
static void fight(Player player, Enemy enemy) { // TO-DO, error code in switch
  Scanner scan = new Scanner(System.in);
  int cases = 0;

  do {
    System.out.println("Please make a choice...\n" +
    "1: Attack\n" +
    "2: Skill\n");
     cases = scan.nextInt();

    switch(cases){
      // case 1: attack, case 2: skill
      case 1:
        player.attack(enemy);
        enemy.attack(player);
    }

  } while (player.getHp() <= 0 || enemy.getHp() <= 0);
  scan.close();
} // end_fight
}

// [...]

我想要具有多个扫描输入的不同方法,但是我总是收到此错误消息:

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    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 RPG.fight(RPG.java:133)
    at RPG.main(RPG.java:47)

C:\ Users \ yusuf \ Desktop \ txtRPG>

0 个答案:

没有答案