[問題] 關於Scanner (hasNext)
想請教一下一點關於 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
推
06/27 15:29, , 1F
06/27 15:29, 1F
→
06/27 16:09, , 2F
06/27 16:09, 2F
我寫了這樣測試
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)