在学习Scanner 类的过程中遇到一点小困难,求大家帮个忙
Scanner reader=new Scanner(System.in);
System.out.println(reader.hasNext());
为什么上面的没有输出ture 或者false ,而是要求输入数据?
而Scanner reader=new Scanner("abcde");
System.out.println(reader.hasNext());则会输出true ,为什么控制台要要求输入数据,还有我发现在在hasnext() 和直接next()的两个方法都会要求输入数据?它们之间有什么关系和区别????????
第1个回答 2011-09-30
你好,hasNext()方法的定义如下:
public boolean hasNext()如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。
返回:
当且仅当此扫描器有另一个标记时才返回 true
next()方法的定义:
public String next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。即使以前调用 hasNext() 返回了 true,在等待要扫描的输入时此方法也可能阻塞。
相信你看完上面的解释,就应该明白是怎么回事了。追问
public boolean hasNext()如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。
返回:
当且仅当此扫描器有另一个标记时才返回 true
next()方法的定义:
public String next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。即使以前调用 hasNext() 返回了 true,在等待要扫描的输入时此方法也可能阻塞。
相信你看完上面的解释,就应该明白是怎么回事了。追问
额..还是 有点不明白, 这个扫描输入中,这个标记是什么?
追答这个标记被封装起来了,你在源码中可以看到。举个简单的例子,它可能在内部定义了一个:
boolean flag = false ;如果检查到你输入了,将该flag置为true。然后检查标记,执行对应的逻辑。这就是标记的作用。
第2个回答 2011-09-30
System.in是要你输入的
new Scanner("abcde");
abcde就是输入了
new Scanner("abcde");
abcde就是输入了