手动输入输入工作.使用输入文件导致无限循环?

dfe*_*r88 2 java file-io user-input

我正在为学校编写一份编程任务.这是一个简单的基于文本的RPG.当我在本地(手动)测试程序时,它可以正常工作.但是,当我将它提交给评分服务器时,它会创建某种无限循环.

我通过电子邮件发送了我的教授,他通过解释服务器如何测试程序来回应.它使用以下格式:java IPA1 (XML file name) < (Input file) > (output file).IPA1是主java文件的名称.似乎< (Input file)由于某种原因导致无限循环......但我无法确定原因.

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

boolean gameOver = false;
while (!gameOver) {
  Command cmd = inputParser.getCommand();
  gameOver = processCommand(cmd);
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

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

the*_*ejh 5

这是因为您正在创建一个缓冲读取器,其读取次数超过您请求读取的次数.当您告诉它读取五个字符时,它会读取更多内容并将其保存以用于下一次提高性能的请求.您应该重用一个BufferedReader而不是创建其中的许多BufferedReader,因为当您创建其中许多时,第一个已经抓住了您想要用第二个读取的内容.