今天开始学Java 菜鸟对Scanner的迷惑

本菜鸟初学Scanner这个类,对于hasNext()和nextLine()这两个函数弄的不是很清楚(我的重点一直很迷),后面通过实验发现,如果程序里面没有while(sc.hasNext()){}这个循环的话,对于String s = nextLine()这一条函数来说的话就只能取一次值(这里的一次值是指用户输入有效字符开始到按回车结束的字符串),若有hasNext()这个函数存在,则s可以被赋值多次。当然这里可以使用for循环,然后使用数组循环赋值。

贴一下解释:

asNext系列方法只会判断你缓冲区中的数据是否符合某种类型,而不会取出,所以当你下次循环这个方法发现缓冲区中还有数据,会继续判断缓冲区中的数据,所以产生了死循环,只有用Next()方法吧缓冲区中的数据接收掉,它就会重新向用户发送输入请求了

hasNext()可能还会造成死循环,解决办法也贴一下:

Scanner sc = new Scanner(System.in);

while(!sc.hasNext("0")){

sc.next();

}

其实还有一种方法解决死循环,感觉太复杂了超出本菜鸟的理解范围了,所以就不贴了。呵呵


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值