繁体   English   中英

创建两个不同类别的扫描仪

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM