尋找基於前一個問題答案幫助選擇下一個問題的算法。例如:如果第一個問題是 1.您是否擁有智能手機? 如果有的話 2.它有什麼類型的傳感器?算法 - 根據前一個查詢選擇下一個查詢
如果沒有 2.您想購買哪款智能手機?
這些問題的分支應基於最後一個問題並回答。 有哪些技巧可以用來推導這一點。任何通用算法都可用於此目的。
尋找基於前一個問題答案幫助選擇下一個問題的算法。例如:如果第一個問題是 1.您是否擁有智能手機? 如果有的話 2.它有什麼類型的傳感器?算法 - 根據前一個查詢選擇下一個查詢
如果沒有 2.您想購買哪款智能手機?
這些問題的分支應基於最後一個問題並回答。 有哪些技巧可以用來推導這一點。任何通用算法都可用於此目的。
您必須決定是否應該詢問問題。這是一種方法。我沒有提供QuestionContext,這是你的工作,決定如何存儲答案,並根據這個問題決定問題是否可用。
我很想用next()
問題的方法,但有時你需要更多的上下文(即如果你擁有智能手機&智能手機來自蘋果,請問什麼版本的iOS正在運行)。
希望這會有所幫助!
interface Question {
public boolean isAvailable(QuestionContext ctx);
public void ask();
// ... rest of the methods
}
public class Questionnaire implements QuestionContext {
private Question[] qs;
// constructors, getters, etc.
public void ask() {
for (Question q : qs) {
if (q.isAvailable(this)) {
q.ask();
}
}
}
}
p.s.如果你需要更復雜的東西,有一些流程框架可用於各種任務,但你必須明白並提出可滿足你需求的東西。一個例子是Spring WebFlow
,它在一個嚮導式頁面上下文中決定下一個頁面。
通常在代碼級別,這看起來很好,但下一個問題需要考慮回答。正如您所指出的那樣,需要根據答案構建分支鏈問題。結賬Spring WebFlow將對此提供幫助。 – shrik
請參閱http://meta.stackexchange.com/questions/165519/where-should-i-post-questions-about-algorithms-stack-overflow-or-programmers-se – Evert
這與算法無關。您保留一組(問題,答案,下一個問題)s.t.每當收到答案時,請查看下一個問題,然後繼續。 –
@KenCheung是(Q,A,NQ)的格式很好。這種表示問題和答案的方式可以是圖形數據庫中的節點路徑節點。希望NEO4J的實施可能會有同樣的效果。 – shrik