一、实例代码
import java.util.*;
public class ScannerKeyBoardTest
{
public static void main(String[] args)
{
System.out.println("请输入若干单词,以空格作为分隔");
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
{
System.out.println("键盘输入的内容是:"
+ sc.next());
}
System.out.println("执行吗");
}
}
最后的“执行吗”会被执行到吗?来,看实验结果
文字模糊,手动说明(这里的输入光标在闪动,期待你的再次输入!)
二、执行过程
为什么会这样,和我们理解的不一样呀?我们理解的运行过程是
hasNext()在缓冲区中依次扫描单词,分别返回true,然后再执行打印输出。扫描到空时返回false,退出while循环,最后执行“执行吗”语句。一般人都会这么想,然而不能想当然。下面我们去查一下API
方法解释:如果此扫描器的输入(缓冲区)中有另一个token(输入的字符串),则返回true。what? 根本没有提到什么时候返回false。其实执行过程是这样的(重点:),当执行到hasNext()时,它会先扫描缓冲区中是否有字符,有则返回true,继续扫描。直到扫描为空,这时并不返回false,而是将方法阻塞,等待你输入内容然后继续扫描。这样的话,它岂不是吃了**口香糖根本停不下来。
三、解决方法
使用带有参数的重载方法,当扫描到的字符与参数值匹配时返回true
修改后代码
import java.util.*;
public class ScannerKeyBoardTest
{
public static void main(String[] args)
{
System.out.println("请输入若干单词,以空格作为分隔");
Scanner sc = new Scanner(System.in);
while(!sc.hasNext("#")) //匹配#返回true,然后取非运算。即以#为结束符号
{
System.out.println("键盘输入的内容是:"
+ sc.next());
}
System.out.println("会执行的");
}
}
运行结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/6392.html