[問題] 關於Scanner (hasNext)

看板java作者 (瑋哥)時間14年前 (2011/06/27 15:04), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
想請教一下一點關於 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
token就是以空白、tab、\n 隔開的"單字"
06/27 15:29, 1F

06/27 16:09, , 2F
那為什麼第一次執行到他時會返回true呢 ?
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)
文章代碼(AID): #1E22kK4S (java)