无法使用两个扫描仪进行不同的输入

时间:2017-09-19 18:06:29

标签: java java.util.scanner nosuchelementexception

当使用Scanner从标准输入读取时,换行符与不打算读取的内容不同,导致后续输入出现问题。这可以使用exampleScanner.nextLine()之类的东西来修复。但是,我正在尝试使用两种不同的扫描仪,如下所示,我无法解决问题。我知道有Scanner这类问题有很多问题和答案,但我似乎无法找到我特定问题的答案。我的问题是可以解决的,还是我必须使用Scanner?这是一些代码:

import java.util.Scanner;
import java.util.NoSuchElementException;

public class ScannerTest {
  public static void main(String[] args) {

    char sym = ' ';
    int x = 0;

    /* scan for char (string) */
    Scanner scanForSym = new Scanner(System.in);
    System.out.print("Enter a symbol: ");
    try {
      sym = scanForSym.next().charAt(0);
    } catch (NoSuchElementException e) {
      System.err.println("Failed to read sym: "+e.getMessage());
    }
    scanForSym.nextLine(); // makes no diff when using different Scanner
    scanForSym.close();

    /* scan for int with different scanner */
    Scanner scanForX = new Scanner(System.in);
    System.out.print("\nEnter an integer: ");
    try {
      x = scanForX.nextInt();
      //x = scanForSym.next(); // this works fine (comment out the close above)
    } catch (NoSuchElementException e) {
      System.err.println("Failed to read x: "+e.getMessage());
    }
    scanForX.close();

    System.out.println("sym: "+sym);
    System.out.println("x: "+x);
  }
}

1 个答案:

答案 0 :(得分:1)

错误与此行相关联:

scanForSym.close();

关闭System.in InputStream。那么这个电话

x = scanForX.nextInt();

因为scanForX试图从已经关闭的InputStream中读取而抛出IOException。

尝试移动

scanForSym.close();

以下

x = scanForX.nextInt();

虽然(从评论中重申)但是,当它们与System.in相关联时,不清楚为什么要使用多个扫描仪实例。