Ввод ввода вручную работает.Использование входного файла вызывает бесконечный цикл? - PullRequest
2 голосов
/ 01 ноября 2010

В настоящее время я работаю над заданием по программированию для школы. Это простая текстовая 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 ]

5 голосов
/ 01 ноября 2010

Это потому, что вы создаете буферизованный ридер, который читает больше, чем вы просили его прочитать. Когда вы говорите ему читать пять символов, он читает намного больше и сохраняет их для следующего запроса, чтобы повысить производительность. Вам следует повторно использовать один BufferedReader вместо создания многих из них, потому что при создании многих из них первый уже захватывает материал, который вы хотите прочитать, со вторым.

2 голосов
/ 01 ноября 2010

Попробуйте напечатать то, что вы прочитали - может быть символ новой строки в конце строки или что-то другое в файле, поэтому он не выходит из цикла.Вы также можете отладить программу, чтобы точно увидеть, что происходит.

Если вы хотите получить точный ответ, почему в этом случае это не работает, вам нужно опубликовать функцию processCommand () и содержимое файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...