oi的java輸入hasNext和hasNextLine區別
https://www.nowcoder.com/discuss/8050
比如一道oi題目的輸入是這樣的
7 15 9 5
採用java語言的話,有的同學這樣處理輸入輸出
1 2 3 4 5 |
|
牛客網的系統會提示錯誤,但是如果把hasNextLine改成hasNext或者hasNextInt的話,就會提示正確
1 2 3 4 |
|
這裡要說明一下java中,hasNextLine和hasNext的區別。
先說結論:
採用has xxxx的話,後面也要用next xxxx。比如前面用hasNextLine,那麼後面要用 nextLine 來處理輸入。
---------------分割線-----------------
說一下兩個方法的區別
hasNext是檢查是否有非空字元。
hasNextLine是檢查輸入中是否還有linePattern。其中LinePattern其實是匹配一個正則表示式。
1 2 3 |
"\r\n|[\n\r\u2028\u2029\u0085]" ;
|
判題系統的所有測試用例都是儲存在檔案中,在上面的例子中,測試用例的檔案為
7 15 9 5
當處理完5後,沒有非空字元了,hasNext返回了false,但是在linux系統中,5後面還有一個換行符\n,0X0A(有興趣的同學可以自己建立然後用二進位制方式看一下檔案)
所以hasNextLine會返回true,但是其實後面並沒有可以讀的元素了,從而下面的in.nextInt會拋異常。