我目前正在为学校做编程工作。这是一个简单的基于文本的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);
}
我的问题是:当我手动按顺序键入每个命令时,为什么会这样?但是当使用输入文件时会失败?
答案 0 :(得分:5)
这是因为您正在创建一个缓冲读取器,读取的内容超出您的请求读取次数。当你告诉它读取五个字符时,它会读取更多并保存它们以用于下一个提高性能的请求。您应该重用一个BufferedReader而不是创建其中的许多BufferedReader,因为当您创建其中许多时,第一个已经抓住了您想要用第二个读取的内容。
答案 1 :(得分:2)
尝试打印出您所读取的内容 - 字符串末尾可能有新的行符号或文件的内容不同,因此它不会从循环中退出。您还可以调试程序以确切了解正在发生的事情。
如果你想要确切的答案为什么在这种情况下它不起作用你需要发布 processCommand()函数和文件的内容。