作者kusoayan (玮哥)
看板java
标题[问题] 关於Scanner (hasNext)
时间Mon Jun 27 15:04:49 2011
想请教一下一点关於 scanner 的问题
这是一个在ZeroJudge上的题目 而且是第一题 囧
题目在这
http://zerojudge.tw/ShowProblem?problemid=a001
其中 java 给的范例是用 hasNext 当回圈的判断条件
while (cin.hasNext())
{
s=cin.nextLine();
System.out.println("hello, " + s);
}
我上 java 的 doc 查了 hasNext
他说当输入的内容有another token时返回true
这里就不是很懂了 ... 所谓的 token 是什麽 囧
我自己猜想是一些分隔的符号 ex:空白 \n …
但问题又来了 当第一次执行到 while 的时候
应该还没输入任何内容阿 所以不管 token 是什麽
输入的内容中都应该没有吧(只有NULL)
为什麽他还是会返回true呢 ~"~?
另外就是
System.out.println("%s",scanner.next())
他的执行顺序是先 scanner 取的输入内容 再执行 println 吗
是只要程式码中有"待输入"时 就会先等待输入 再执行该行剩下的部份吗
以上两个问题希望有高手能指点一下~"~
javaworld 和 ptt 上的文都有爬过了
还是不太懂~"~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.228.243.138
1F:推 liu2007:token就是以空白、tab、\n 隔开的"单字" 06/27 15:29
2F:→ kusoayan:那为什麽第一次执行到他时会返回true呢 ? 06/27 16:09
我写了这样测试
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
System.out.println("loop start");
System.out.println("%s",scanner,readLine());
System.out.println("loop end");
}
发现一执行 他就会等待输入
输入 input 後
output是
loop start
input
loop end
後来我又写了一个只有两行的
Scanner scanner = new Scanner(System.in);
scanner.next();
也是一样一开始就在等待输入
---
综合以上两点
我可以这样解读吗 ?
scanner 物件有个类似constructor(建构子)等东西
会在执行 method 前建立一个类似暂存区的地方等待输入
取得输入後才按照程式码的要求利用取得的输入去执行某些 method ?
像是呼叫了 hasNext 就会先让我输入 输入完才执行 hasNext
因为已经输入内容了 所以hasNext就是 true
可是这样讲好像又怪怪的= =
因为我如果输入 1 2 3
他就会分别跑出
1
2
3
然後再等待输入
还是 scanner 会把被 read 或 next 之类 method 过的内容从输入暂存区删掉
如果输入暂存区是空的 就要求使用者输入内容 ?
请高手指点了~"~
※ 编辑: kusoayan 来自: 125.228.243.138 (06/27 16:39)