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

时间:2010-11-01 18:45:48

标签: java user-input file-io

我目前正在为学校做编程工作。这是一个简单的基于文本的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);
}

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);
}

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

尝试打印出您所读取的内容 - 字符串末尾可能有新的行符号或文件的内容不同,因此它不会从循环中退出。您还可以调试程序以确切了解正在发生的事情。

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