1 回答

TA贡献1871条经验 获得超8个赞
听起来您遇到了行尾问题。
Scanner.nextLine()
将从输入中读取一行加上行分隔符,然后丢弃行分隔符,然后返回它读取的行的实际内容。
行分隔符可以是一个 LF 字符 ( '\n'
) 或一个 CR 字符 ( '\r'
),或者一个 CR 字符后跟一个 LF 字符,或者是几种很少使用的单字符 Unicode 行结尾之一。这种分隔符的多样性反映了各种操作系统如何表示文本文件的历史变化。尝试Scanner
通过接受所有可能性来提供帮助,无论它恰好在哪个平台上运行。
如果我们假设当您粘贴测试数据时,您观察到的行为会以某种方式在您粘贴的程序和您要粘贴到的控制台之间的交互导致您的程序被赋予以单个 CR 结尾的行. 然后Scanner.nextLine()
需要查看它给出的下一个字符是否是 LF——因为如果是,那么它也应该吃掉它,作为行尾的一部分。因此它只会在看到另一个角色后才会返回。
另一方面,当您手动输入时,您的回车键可能会产生 LF 或 CR-LF 组合。nextLine()
一旦看到行结束,它们中的任何一个都会很高兴。
如果你一行一行地粘贴这些行,你应该能够检验这个假设。然后您可能会看到第一行的翻译仅在您粘贴第二行之后出现,依此类推。
您可能不需要为了自动判断编程挑战而担心这一点。判断系统不会将测试输入粘贴到您的程序中,但可能会将其通过管道传输,这意味着您的程序可以在预期生成之前看到所有输入,直到最后的文件结束指示输入。在那种环境下它应该可以正常工作。
添加回答
举报