Java 手工输入。使用输入文件导致无限循环?

Java 手工输入。使用输入文件导致无限循环?,java,user-input,file-io,Java,User Input,File Io,我目前正在为学校做一个编程作业。这是一个简单的基于文本的RPG。当我在本地(手动)测试程序时,它工作正常。然而,当我将其提交给分级服务器时,它会创建某种无限循环 我给我的教授发了电子邮件,他解释了服务器是如何测试程序的。它使用以下格式:javaipa1(XML文件名)(输出文件)。IPA1是主java文件的名称。似乎由于某种原因,

我目前正在为学校做一个编程作业。这是一个简单的基于文本的RPG。当我在本地(手动)测试程序时,它工作正常。然而,当我将其提交给分级服务器时,它会创建某种无限循环

我给我的教授发了电子邮件,他解释了服务器是如何测试程序的。它使用以下格式:
javaipa1(XML文件名)<(输入文件)>(输出文件)
。IPA1是主java文件的名称。似乎由于某种原因,
<(输入文件)
导致了无休止的循环。。。但我无法指出原因

我的程序使用以下代码获取其输入:

boolean gameOver = false;
while (!gameOver) {
  Command cmd = inputParser.getCommand();
  gameOver = processCommand(cmd);
}
getCommand(cmd)
如下所示:

public Command getCommand() {
  String input = "";

  BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  try {
    input = reader.readLine();
  } catch(java.io.IOException exc) {
    System.out.println ("Error");
  }

  return new Command(input);
}

我的问题是:当我手动按顺序键入每个命令时,为什么会起作用。。。但使用输入文件时失败?

请尝试打印您读取的内容-字符串末尾可能有新行符号,或者文件有一些不同之处,因此不会退出循环。您还可以调试程序,以准确地查看发生了什么

如果你想知道为什么在这种情况下它不起作用的确切答案,你需要发布
processCommand()函数和文件的内容。

这是因为您正在创建一个缓冲读取器,该读取器的读取量超过了您所请求的读取量。当您告诉它读取五个字符时,它会读取更多的字符,并将它们保存在下一个请求中以提高性能。您应该重用一个BufferedReader,而不是创建多个BufferedReader,因为当您创建多个BufferedReader时,第一个BufferedReader已经获取了您想与第二个BufferedReader一起读取的内容