当使用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);
}
}
答案 0 :(得分:1)
错误与此行相关联:
scanForSym.close();
关闭System.in InputStream。那么这个电话
x = scanForX.nextInt();
因为scanForX
试图从已经关闭的InputStream中读取而抛出IOException。
尝试移动
scanForSym.close();
以下
x = scanForX.nextInt();
虽然(从评论中重申)但是,当它们与System.in
相关联时,不清楚为什么要使用多个扫描仪实例。