Why does closing a scanner seem to break new scanners?(为什么关闭扫描仪似乎会损坏新的扫描仪?)
本文介绍了为什么关闭扫描仪似乎会损坏新的扫描仪?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
import java.util.Scanner;
public class Foo {
public static void main(String[] args) {
Foo foo = new Foo();
foo.getNextToken();
foo.getNextToken();
}
public void getNextToken() {
Scanner s = new Scanner(System.in);
while (true) {
if (s.hasNext()) {
System.out.println(s.nextLine());
//s.close();
return;
}
}
}
}
当我尝试运行上面的代码时,它的工作方式可能与您预期的一样。 每次我插入一行时,计算机都会粘贴下一行。
但是,如果我取消对s.lose()行的注释,然后再次运行,我会得到以下行为:
由于某些原因,hasNext()方法连续返回FALSE,尽管有非常明显的下一个参数。我尝试了很多方法,但找不到任何解决方法。例如,如果我将代码更改为只
public void getNextToken() {
Scanner s = new Scanner(System.in);
System.out.println(s.nextLine());
s.close();
return;
}
然后,它再次适用于第一条语句,但随后立即给出了NoSuchElementException异常。 当然,如果你不关闭第一个扫描仪,它工作得很好。
我不明白为什么关闭一台扫描仪会影响另一台扫描仪,但我听说不关闭扫描仪是不好的做法,更重要的是,如果我不关闭,会出现恼人的黄色错误消息。有人能告诉我解决这个问题的方法吗?为什么会发生这种情况?我可以在main方法中将scanner作为参数传递,也可以在那里关闭它,但这看起来有点混乱。推荐答案
,因为您已关闭System.in
。别干那事。不要关闭扫描仪。也不要创造新的。继续用同一个就行了。它仍然可以工作。
在同一基础输入上使用多个扫描仪确实是不好的做法。您将丢失数据。
这篇关于为什么关闭扫描仪似乎会损坏新的扫描仪?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:为什么关闭扫描仪似乎会损坏新的扫描仪?


基础教程推荐
猜你喜欢
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 修改 void 函数的输入参数,然后读取 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01