Java多次使用扫描仪

ber*_*rkc 4 java java.util.scanner

我经常遇到这个问题.当我多次使用扫描仪时,它不会从用户那里获得输入.

Scanner scan = new Scanner(System.in);

        System.out.println("1---");

        int try1 = scan.nextInt();

        System.out.println("2---");

        int try2 = scan.nextInt();

        System.out.println("3---");

        String try3 = scan.nextLine();

        System.out.println("4---");

        String try4 = scan.nextLine();
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,结果:

1 ---

12

2 ---

321

3 ---

4 ---

AA

如您所见,它跳过了第3个输入.为什么会这样?我使用新的扫描仪解决了这个问题,有时我有5-6种不同的扫描仪,看起来很复杂.另一个问题是:存在错误"资源泄漏:扫描永远不会关闭".我真的很困惑.

Kon*_*kov 6

问题是,通过使用scanner.nextInt()您只读取一个整数值,而不是整行,并且您不使用\n按下时附加到该行的换行符(\n )Enter.

然后,当您处理读取时,scanner.nextLine()使用换行符(\n)和前一行,并且不读取您想要读取的行.为了强制它读取它,你必须添加一个额外的input.nextLine()声明.

 System.out.println("2---");
 int try2 = scan.nextInt();
 System.out.println("3---");
 scan.nextLine(); //<-- fake statement, to move the cursor on the next line
 String try3 = scan.nextLine();
Run Code Online (Sandbox Code Playgroud)

与问题无关,你必须Scanner在完成工作后关闭,否则编译器会发出警告:

scan.close();
Run Code Online (Sandbox Code Playgroud)