-
Notifications
You must be signed in to change notification settings - Fork 0
/
MyTree.java
95 lines (87 loc) · 3.72 KB
/
MyTree.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.io.File;
import javax.swing.JOptionPane;
/**
* Write a description of class MyTree here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class MyTree extends UserInterface {
static final String GREETING = "In this game you will think of a Musician(s) " +
"and I will guess who you were thinking of.\n\n" +
"Want to play?";
static final File knowledgeBase = new File( "knowledge.ser" );
DecisionTreeNode root;
/**
* Creates a brand new Tree
*/
public MyTree() {
this.root = new ThingNode("Souls of Mischief");
openingMessage(GREETING);
traverseData(this.root, null);
}
public MyTree(DecisionTreeNode root) {
this.root = root;
openingMessage(GREETING);
traverseData(this.root, null);
}
public DecisionTreeNode traverseData(DecisionTreeNode child, QuestionNode currentRoot) {// change this to return nothing
if(child == null) {
throw new NullPointerException
("There is no place to start traverseing data");
}
// At the end of tree, guarnteed a thing node
// Guess is correct else expand knowledge base
if(child.getClass() == ThingNode.class) {
if(super.makeGuess(child.getValue())) { // change to get string
return child;
} else {
expandKnowledgeBase((ThingNode)child, currentRoot); return null;
}
// Traverse tree until a ThingNode is reached
} else if(child.getClass() == QuestionNode.class) {
QuestionNode question = (QuestionNode)child;
if(super.askQuestion(question.getQuestion())) {
return traverseData(child.getYesLink(), question);
} else {
return traverseData(child.getNoLink(), question);
}
}
return child;
}
public void expandKnowledgeBase(ThingNode wrongThing, QuestionNode currentRoot) {
QuestionNode newQuestion = null;
ThingNode correctThing = super.getNewThing();
System.out.println( " before method " + correctThing.getValue());
String question = super.getNewQuestion();
if(currentRoot == null) { // Expanding knowledge base on tree with a Thing as root
if(super.getQuestionRelationship(correctThing.getValue())) {
System.out.println("Inside root is null");
newQuestion = new QuestionNode(question, wrongThing, correctThing);
this.root = newQuestion;
} else {
System.out.println(correctThing.getValue());
newQuestion = new QuestionNode(question, correctThing, wrongThing);
this.root = newQuestion;
}
}
else {
if(super.getQuestionRelationship(correctThing.getValue())) {
newQuestion = new QuestionNode(question, wrongThing, correctThing);
if(currentRoot.getNoLink() == wrongThing) {
currentRoot.setNoLink(newQuestion);
} else {
currentRoot.setYesLink(newQuestion);
}
} else {
newQuestion = new QuestionNode(question, correctThing, wrongThing);
if(currentRoot.getNoLink() == wrongThing) {
currentRoot.setNoLink(newQuestion);
} else {
currentRoot.setYesLink(newQuestion);
}
//currentRoot.setNoLink(newQuestion);*/
}
}
}
}