P
1.迭代器原理
1.当创建完成指向某个集合或者容器的Iterator对象时,这时的指针其实指向的是第一个元素的上方,即指向一个 空
2.当调用hasNext方法的时候,只是判断下一个元素的有无,并不移动指针
3.当调用next方法的时候,向下移动指针,并且返回指针指向的元素,如果指针指向的内存中没有元素,会报异常。
4.remove方法删除的元素是指针指向的元素。如果当前指针指向的内存中没有元素,那么会抛出异常。
2.用法
Scanner scan=new Scanner(System.in);
此句表示从控制台获取数据。
scan.hasNext()表示是否有输入数据。
while语句快表示当你输入数据的时候,就执行输出scan.next()
所以只要你输入数据了,它就可以执行
所以后台只是开了一块内存,一直未关闭,不算死循环。
示例代码:
运行结果
首先hasnext()方法阻塞等待用户输入,输入“马云 强东 化腾”后按回车,hasnext()方法返回true进入循环,next()方法指针不断下移读取完后光标仍在闪烁,等待用户再次输入,无法跳出循环运行 System.out.println(“输入完成”)。
结果解释
调用hasnext()方法时如果当前scanner对象的迭代器(iterator)指针指向的下一个字符串值为空(不是判断当前指针指向的值,而是判断下一个值是否为空)则阻塞此方法等待用户输入,用户输入完后返回true,指针不会下移。如果当前scanner对象的迭代器(iterator)指针指向的下一个字符串值不为空则立即返回true,不会等待用户输入。
hasnext()方法永远不会返回false,因为如果scanner对象的迭代器(iterator)指针的下一个字符串值为空时会阻塞此方法继续等待用户输入。
解决方法:
如果想要通过hasnext()方法结束输入需要用到hasnext带参数的一个重载方法。
修改后的代码
用“#”号当结束条件
运行结果
网友评论