Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么关闭扫描仪似乎会破坏新的扫描仪? import java.util.Scanner; 公开课Foo{ 公共静态void main(字符串[]args){ Foo-Foo=新的Foo(); foo.getNextToken(); foo.getNextToken(); } public void getNextToken(){ 扫描仪s=新的扫描仪(System.in); while(true){ 如果(s.hasNext()){ System.out.println(s.nextLine()); //s、 close(); 返回; } } } }_Java_Input_Io_User Input - Fatal编程技术网

为什么关闭扫描仪似乎会破坏新的扫描仪? import java.util.Scanner; 公开课Foo{ 公共静态void main(字符串[]args){ Foo-Foo=新的Foo(); foo.getNextToken(); foo.getNextToken(); } public void getNextToken(){ 扫描仪s=新的扫描仪(System.in); while(true){ 如果(s.hasNext()){ System.out.println(s.nextLine()); //s、 close(); 返回; } } } }

为什么关闭扫描仪似乎会破坏新的扫描仪? import java.util.Scanner; 公开课Foo{ 公共静态void main(字符串[]args){ Foo-Foo=新的Foo(); foo.getNextToken(); foo.getNextToken(); } public void getNextToken(){ 扫描仪s=新的扫描仪(System.in); while(true){ 如果(s.hasNext()){ System.out.println(s.nextLine()); //s、 close(); 返回; } } } },java,input,io,user-input,Java,Input,Io,User Input,当我尝试运行上述代码时,它的工作原理与您所期望的一样。 每次我插入一行,计算机就会粘贴下一行 但是,如果取消注释s.close()行,然后再次运行,则会出现以下行为: 出于某种原因,hasNext()方法不断返回false,尽管很明显存在下一个参数。我尝试了很多东西,但找不到任何解决办法。例如,如果我将代码更改为 public void getNextToken(){ 扫描仪s=新的扫描仪(System.in); System.out.println(s.nextLine()); s、 cl

当我尝试运行上述代码时,它的工作原理与您所期望的一样。 每次我插入一行,计算机就会粘贴下一行

但是,如果取消注释s.close()行,然后再次运行,则会出现以下行为:

出于某种原因,hasNext()方法不断返回false,尽管很明显存在下一个参数。我尝试了很多东西,但找不到任何解决办法。例如,如果我将代码更改为

public void getNextToken(){
扫描仪s=新的扫描仪(System.in);
System.out.println(s.nextLine());
s、 close();
返回;
}
然后,它再次适用于第1条语句,但随后立即给出了NosTouchElementException。 当然,如果不关闭第一台扫描仪,它可以正常工作


我不明白为什么关闭一台扫描仪会影响另一台扫描仪,但我听说不关闭扫描仪是一种不好的做法,更重要的是,如果我不关闭扫描仪,会出现一条恼人的黄色错误消息。有人能告诉我一个解决这个问题的方法吗?为什么会这样?我可以在main方法中将scanner作为参数传入,也可以在那里关闭它,但这似乎有点混乱。

因为您在中关闭了
系统。不要那样做。不要关闭扫描仪。也不要创建新的。继续使用同一个。它仍然有效


在同一个底层输入上使用多个扫描仪确实是一种糟糕的做法。您将丢失数据。

因为您在
中关闭了
系统。不要那样做。不要关闭扫描仪。也不要创建新的。继续使用同一个。它仍然有效。在同一个底层输入上使用多个扫描仪确实是一种糟糕的做法。您将丢失数据。谢谢,您可以将其添加为答案吗?while(true)循环的目的是什么?s、 nextLine()应该阻止等待输入。在这种情况下,tradeJmark不会阻止