Вы пишете правильный конечный автомат, но одна из ключевых особенностей конечного автомата состоит в том, что его нужно вызывать снова и снова. Первое прохождение состояния - это одно, а потом оно меняется на другое.
Дело в том, что каждое состояние может повторяться снова и снова. Таким образом, вы должны задать свой вопрос в одном состоянии и ждать ответа в следующем. Если вы оставите его в этом состоянии, он просто продолжит спамить вопрос. Итак, состояние 0 должно задавать вопрос, затем состояние 1 просто зацикливается на ожидании ответа, и ответ отправляет вас в состояние 2 или 3. для получения большего количества текста.
Или вы можете даже иметь конечные автоматы внутри конечных автоматов. Дело в том, что код цикла продолжает достигать той же точки, пока не придет время заняться чем-то еще.
Все это должно быть внутри while l oop. Вы можете использовать while (true) или while (1), или даже для (;;), но мне нравится иметь логическое значение, которое я могу использовать, чтобы, если я когда-либо захочу завершить программу, я мог просто установить для него значение false и программа завершается.
Псевдокод:
boolean running = true;
while(running){
switch(state){
// etc. etc. for the state machine.
// if you want to end the program somewhere then set running to false
}
}