Мне нравится иметь самодокументируемый код, поэтому вот пара советов о том, как у вас может быть хороший плотный основной цикл:
семантика функционального вывода
public void loop() {
// TODO: ask for the keyword and store it somewhere
while(true) {
try {
updateStatistics(checkOutput(getSentence()));
} catch (EndOfInput) {
printStatistics();
}
}
}
Объектно-ориентированный
public void loop() {
String keyword = myPrompter.getNextSentence();
myAnalyzer.setKeyword(keyword);
while (true) {
String sentence = myPrompter.getNextSentence();
AnalysisResult result = myAnalyzer.analyze(sentence);
if (result.isEndOfInput()) {
myAnalyzer.printStatistics();
return;
}
}
}
То, что оба эти подхода дают вам, представляет собой простую структуру для подключения конкретной логики.Вы можете сделать все это в основном цикле, но это может сбить с толку.Вместо этого желательно, чтобы одна функция выполняла одну задачу.Одна функция запускает цикл, другая получает входные данные, другая подсчитывает количество предложений и т. Д.
Иногда я начинаю с этих маленьких функций и собираю приложение снизу вверх, поэтомунаписать метод, который принимает строку и возвращает true / false в зависимости от того, является ли она строкой «stop».Вы даже можете написать модульные тесты для этого метода, чтобы при создании остальной части приложения вы знали, что этот метод выполняет то, для чего он предназначен.Приятно иметь много модульных компонентов, которые вы можете протестировать по пути, вместо того, чтобы писать огромный длинный цикл и удивляться, почему он не выполняет то, что вы хотите.