Условная логика динамически - PullRequest
2 голосов
/ 31 марта 2011

Я ищу повторно используемый инструмент или алгоритм, который позволяет мне динамически применять условную логику к вопросам.

Позвольте объяснить подробнее:

вопрос 1 - Сколько вам лет?

a) less 18        
b)between 18-25     
c) greater than 25

если он выберет

a) then he go to Question 2 
b) he will goto question 5 
c) he will goto question 7 

Итак, как я уже сказал, следующий вопрос зависит от ответа на текущий вопрос. Мне не нужно устанавливать условие для каждого вопроса. Мне нужно, чтобы оно было динамическим.

Надеюсь, теперь все ясно. Есть ли какой-либо компонент, шаблон проектирования или алгоритм, реализующий то, что я сказал

Все идеи приветствуются.

Ответы [ 5 ]

5 голосов
/ 31 марта 2011

Звучит так, что вам, вероятно, нужна таблица поиска, которая эффективно сопоставляет пару (входной вопрос, ответ) с номером следующего вопроса. Возможно, по умолчанию следует «перейти к следующему вопросу», если в таблице нет записи.

Как именно вы представите его в структурах данных, будет зависеть от того, что вы используете для хранения вопросов. Например, в SQL вы можете иметь таблицу со столбцами «входной вопрос, ответ, следующий вопрос». В C # у вас может быть Dictionary<Tuple<int, int>, int> ... или, возможно, (если не будет огромное количество вопросов) просто List<AnswerPath>, где AnswerPath содержит те же три значения, что и SQL таблица сделала бы. (Измените имя, это ужасно, но вы поняли.)

4 голосов
/ 31 марта 2011

Подумайте о построении своих вопросов в виде графика, где каждый ответ указывает на упорядоченный набор других вопросов.

Еще лучше, дайте каждому вопросу набор предварительных условий, которые должны быть удовлетворены предыдущими ответами.Например, для вопроса 2 предварительные условия могут заключаться в том, что ответом на вопрос 1 является либо a, либо b.

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

2 голосов
/ 31 марта 2011

Добавьте свойство с именем Next Question для каждого ответа.

1 голос
/ 31 марта 2011

Звучит как работа для схемы Цепочка ответственности ... ... 1003 *

1 голос
/ 31 марта 2011

вы можете использовать Dictionary<Tuple<Question,Answer>>,Question>, чтобы вопрос и ответ стали ключом для следующего вопроса.

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