Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
扫描仪问题“;java.util.NoSuchElementException";-扫描仪可以';方法中不能使用_Java_Java.util.scanner - Fatal编程技术网

扫描仪问题“;java.util.NoSuchElementException";-扫描仪可以';方法中不能使用

扫描仪问题“;java.util.NoSuchElementException";-扫描仪可以';方法中不能使用,java,java.util.scanner,Java,Java.util.scanner,我正在尝试为游戏机制作角色扮演游戏,这是我的第一个项目 到目前为止,一切正常,但我有一个扫描仪的问题。在fight()方法中,扫描器总是发出错误消息,我不理解 我已经尝试过将它变成一个类变量,并多次使用它,即使尝试过更改变量名,但都失败了 我想得到一些帮助,谢谢 public class RPG { // CLASS ATTRIBUTES Player player; private static Weapon[][] weaponArsenal = new Weapon[4][2]; pri

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

到目前为止,一切正常,但我有一个扫描仪的问题。在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
}

C:\Users\yusuf\Desktop\txtRPG>

当您有一台使用System.in的扫描仪,并且您关闭了该扫描仪时,您也会关闭System.in,并且您无法再次打开该扫描仪。所以,使用一台扫描仪,而不是两台,只要需要输入,就保持打开状态。在本例中,您可以将main()中打开的扫描仪作为参数发送到fight()133:cases=scan.nextInt();另外,在从扫描仪读取数据时,您主要希望使用
nextLine()
而不是
next()
,或者您有更多方法创建
Scanner
实例并关闭它们,或者您的用户名包含空格。目前我在您(当前)的代码中看不到导致此异常的其他方式。谢谢@JoakimDanielson,这有助于我!
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)