Для меня это звучит так, как будто вам нужно дерево:
- Вопрос будет представлен в виде узла
- Ответ - это преимущество, ведущее от одного вопроса к другому
- Ответ, не приводящий к новому вопросу, просто будет иметь целевой узел как ноль.
В Java вы могли бы представить это так:
class Question {
// The question, for example "What is the color of the sky?"
String question;
// List of answer alternatives: For example
// - Blue (with destination, "What is the color of the sun?")
// - Red (with destination null)
List<Answer> answers;
}
class Answer {
// The answer, for example "Blue"
String answer;
// The next question (or null, if this answer is terminating)
Question destinationQuestion;
}
Чтобы создать полное дерево этих объектов, вам нужно либо
Предоставить конструкторы, которые принимают один аргумент для атрибута
В таком случае вам нужно построить дерево из листьев (поскольку вы не можете предоставить промежуточные узлы с их аргументами, если вы их уже не создали)
Создайте "сеттер" -методы, создайте все вопросы и "установите" соответствующих детей там, где они должны быть. (Это позволит вам построить дерево от корня до листьев.)
Другие альтернативы:
Вы можете использовать DAG (ориентированный ациклический граф), если вы хотите повторно использовать части дерева в нескольких местах (то есть, если несколько ответов приводят к одному и тому же ответу)
Вы можете использовать обычный ориентированный граф, если хотите разрешить циклы в системе вопросов.
В любом случае, два класса, которые я описал выше, отвечают всем требованиям!