Java while(scanner.hasNext())无法跳出的解决方案
Java while(scanner.hasNext())无法跳出
情况说明:
该问题是在做PAT乙级1010时遇到的,我需要在键盘读入有限个数,然后两两进行计算。我一开始想的是声明一个数组,将所有读入的数字进行保存,再分别计算,但是我发现他并不会跳出我设的循环,而是一直在执行
当读入最后一个数据的时候,并不是跳出,而是阻塞在了while中,一直执行
原因:
hasNext(),是如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。所以循环会一直下去。
解决方案:
此时,可以设置一个终止符,调用hasNext()的重载方法hasNext(String patten):如果下一个输入与从终止符相匹配,则返回 true。扫描器不执行任何输入。
//例:以“0”作为终止符 Scanner in = new Scanner(System.in); while (!in.hasNext("0")) { System.out.println(in.next()); }
但是这种操作并不能满足我对于题目解答的要求。我运行了网上java写的答案,发现也是一样的问题,只不过可以在while中进行计算。在卡死前将所有结果输出。
还有一种解决办法就是将输入一字符串的形式读入,然后进行拆解并转成int型数据进行计算。
java 的while+hasNext()
/** @方法1:遇到特殊符号结束 */ public static void main(String args[]){ // System.in代表标准输入,就是键盘输入 Scanner sc = new Scanner(System.in); // 增加下面一行将只把回车作为分隔符 // sc.useDelimiter("\n");//useDelimiter 可以将分隔符号修改为"回车",或者其他字符。 System.out.println("Please input a number"); // 判断是否还有下一个输入项 while(!sc.hasNext("0"))//遇到0结束 ///此情况可以设置一个终止符,调用hasNext()的重载方法hasNext(String patten): // 如果下一个标记与从指定字符串构造的模式匹配,则返回 true。扫描器不执行任何输入。 { // 输出输入项 System.out.println("键盘输入的内容是:" + sc.next()); System.out.println("Please input a number"); } System.out.println("不执行了"); }
/** @方法2以输入"quit",结束输出 */ public static void main(String[] args){ System.out.print("请输入值:"); Scanner s = new Scanner(System.in); while(s.hasNext()){ String a = s.next(); //将s.next()赋值给变量a if("quit".equals(a)){ break; }else{ System.out.println(a); } } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。
原文出处:https://blog.csdn.net/qunqunstyle99/article/details/82874288
相关文章
- 这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- 这篇文章主要介绍了C#中while循环语句用法,以实例形式详细分析了while语句的用法,并对return,continue,break的区别做了进一步的分析,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
Java中lombok的@Builder注解的解析与简单使用详解
这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06- 下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解
这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下...2020-05-20- 这篇文章主要介绍了shell脚本实战-while循环语句,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-09