[英]Creating Two Scanners In Different Class
我目前在我的项目中使用两个单独的类中的两个不同的扫描器:两者都接受执行不同操作的用户输入。 调用第一个扫描仪可以正常工作,但是当我尝试调用第二个扫描仪时,即使关闭了第一个扫描仪,它也会将输入注册为null。
1类
Scanner scan = new Scanner(System.in);
public void foobar(){
System.out.println("Enter data: ");
String foo = scan.next();
scan.close();
class2.function(foo);
}
2级
Scanner scan1 = new Scanner(System.in);
public void foobar1(String foo){
System.out.println("Enter more data: ");
String fooo = scan1.Next();
//Automatically prints null here and closes program
}
我应该只以某种方式使用一个扫描仪吗? 还是以其他方式使用Scanner类? 谢谢!
scan.close();
还会关闭System.in
以便无法从流中读取更多数据。 因此,当您从scan1
开始读取时, System.in
将不再返回任何数据。
因此,如果所有实例都使用相同的输入流,则在完成所有扫描之前,请不要关闭任何Scanner
实例。
请参阅Scanner#close()
的文档以获取更多信息。
关闭此扫描仪。 如果尚未关闭此扫描器,则如果其基础可读文件也实现了Closeable接口,则将调用该可读文件的close方法。
并且,如果您查看System.in
的文档,您会发现它确实实现了Closeable
接口。
因此,调用InputStream#close()
并关闭InputStream
从而使您没有输入流可以读取数据。
关闭此输入流并释放与该流关联的所有系统资源。
无需创建两个扫描仪,可以使用相同的Scanner
对于既是一次扫描关闭流System.in
也得到关闭。 喜欢:
Scanner scan = new Scanner(System.in);
public void foobar(){
System.out.println("Enter data: ");
String foo = scan.next();
class2.function(foo,scan);
}
哪里:
public void function(String foo,Scanner scan1){
System.out.println("Enter more data: ");
String fooo = scan1.next();
System.out.println(fooo);
}
但是仍然需要创建两个扫描仪时,请使用scan.reset();
而不是scan.close();
在class1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.