1 回答

TA貢獻1871條經驗 獲得超8個贊
聽起來您遇到了行尾問題。
Scanner.nextLine()
將從輸入中讀取一行加上行分隔符,然后丟棄行分隔符,然后返回它讀取的行的實際內容。
行分隔符可以是一個 LF 字符 (?'\n'
) 或一個 CR 字符 (?'\r'
),或者一個 CR 字符后跟一個 LF 字符,或者是幾種很少使用的單字符 Unicode 行結尾之一。這種分隔符的多樣性反映了各種操作系統如何表示文本文件的歷史變化。嘗試Scanner
通過接受所有可能性來提供幫助,無論它恰好在哪個平臺上運行。
如果我們假設當您粘貼測試數據時,您觀察到的行為會以某種方式在您粘貼的程序和您要粘貼到的控制臺之間的交互導致您的程序被賦予以單個 CR 結尾的行.?然后Scanner.nextLine()
需要查看它給出的下一個字符是否是 LF——因為如果是,那么它也應該吃掉它,作為行尾的一部分。因此它只會在看到另一個角色后才會返回。
另一方面,當您手動輸入時,您的回車鍵可能會產生 LF 或 CR-LF 組合。nextLine()
一旦看到行結束,它們中的任何一個都會很高興。
如果你一行一行地粘貼這些行,你應該能夠檢驗這個假設。然后您可能會看到第一行的翻譯僅在您粘貼第二行之后出現,依此類推。
您可能不需要為了自動判斷編程挑戰而擔心這一點。判斷系統不會將測試輸入粘貼到您的程序中,但可能會將其通過管道傳輸,這意味著您的程序可以在預期生成之前看到所有輸入,直到最后的文件結束指示輸入。在那種環境下它應該可以正常工作。
添加回答
舉報