扫描仪问题“;java.util.NoSuchElementException";-扫描仪可以';方法中不能使用
我正在尝试为游戏机制作角色扮演游戏,这是我的第一个项目 到目前为止,一切正常,但我有一个扫描仪的问题。在fight()方法中,扫描器总是发出错误消息,我不理解 我已经尝试过将它变成一个类变量,并多次使用它,即使尝试过更改变量名,但都失败了 我想得到一些帮助,谢谢扫描仪问题“;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
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)