关闭扫描程序会抛出java.util.NoSuchElementException

use*_*205 8 java string element exception

我正在用Java编写一个RPG战斗系统,雄心勃勃吧?好吧,我遇到了一些麻烦.这是我的代码:

void turnChoice() {
    System.out.println("What will you do? Say (Fight) (Run) (Use Item)");
    Scanner turnChoice = new Scanner(System.in);
    switch (turnChoice.nextLine()) {
        case ("Fight"):
            Combat fighting = new Combat();
            fighting.fight();
        default:
    }

    turnChoice.close();
}
Run Code Online (Sandbox Code Playgroud)

当它到达代码中的那一点我得到:

你会怎么做?说(战斗)(运行)(使用项目)
线程"main"中的异常java.util.NoSuchElementException: 在Combat.turnChoice的
java.util.Scanner.nextLine(未知来源)
中找不到行(Combat.java:23)

这个类叫做Combat,我只想让它给出一个选项来打击或运行或使用物品,我首先尝试的是战斗方法.请帮助,我是Java的新手,所以如果可能的话,不要让事情太复杂.

mos*_*ash 26

当您使用Scannerfrom 阅读时System.in,您不应该关闭任何Scanner实例,因为关闭一个将关闭System.in,当您执行以下操作时,NoSuchElementException将被抛出.

Scanner sc1 = new Scanner(System.in);
String str = sc1.nextLine();
...
sc1.close();
...
...
Scanner sc2 = new Scanner(System.in);
String newStr = sc2.nextLine();      // Exception!
Run Code Online (Sandbox Code Playgroud)

  • `System.in`由JVM关闭,你不应该关闭它.别担心.扫描仪只是缓冲读卡器. (6认同)
  • 这不会导致内存泄漏吗? (2认同)