Question
The following program defines a JSON format file to allow for the program to make use of an input file containing a pool of jokes
The following program defines a JSON format file to allow for the program to make use of an input file containing a pool of jokes to tell. Modify the program so that program defines a XML file format (instead of JSON file format) to allow for the program to make use of an input file containing a pool of jokes to tell. Make sure that the jokes are selected at random from the provided XML file with no joke being told more than once.
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class KnockKnockProtocol {
private static final int WAITING = 0;
private static final int SENTKNOCKKNOCK = 1;
private static final int SENTCLUE = 2;
private static final int ANOTHER = 3;
private static final int NUMJOKES = 5;
private int state = WAITING;
private int currentJoke = 0;
private String[] clues;
private String[] answers;
Random random = new Random();
Set
int index = 0;
KnockKnockProtocol() throws FileNotFoundException, IOException, ParseException {
// constructor to load json data
JSONParser parser = new JSONParser();
JSONArray a = (JSONArray) parser.parse(new FileReader("C:\\test.json"));
System.out.println(a.size());
clues = new String[a.size()];
answers = new String[a.size()];
for (Object o : a)
{
JSONObject person = (JSONObject) o;
String cluejson = (String) person.get("clue");
clues[a.lastIndexOf(o)] = cluejson;
String answerjson = (String) person.get("answer");
answers[a.lastIndexOf(o)] = answerjson;
}
index = random.nextInt(clues.length);
currentJoke = index;
validate.add(index);
}
public String processInput(String theInput) {
String theOutput = null;
/* Add First Randomly Genrated Number To Set */
// validate.add(random.nextInt(clues.length));
if (state == WAITING) {
theOutput = "Knock! Knock!";
state = SENTKNOCKKNOCK;
} else if (state == SENTKNOCKKNOCK) {
if (theInput.equalsIgnoreCase("Who's there?")) {
theOutput = clues[currentJoke];
state = SENTCLUE;
} else {
theOutput = "You're supposed to say \"Who's there?\"! " +
"Try again. Knock! Knock!";
}
} else if (state == SENTCLUE) {
if (theInput.equalsIgnoreCase(clues[currentJoke] + " who?")) {
theOutput = answers[currentJoke] + " Want another? (y/n)";
state = ANOTHER;
} else {
theOutput = "You're supposed to say \"" +
clues[currentJoke] +
" who?\"" +
"! Try again. Knock! Knock!";
state = SENTKNOCKKNOCK;
}
} else if (state == ANOTHER) {
if (theInput.equalsIgnoreCase("y")) {
theOutput = "Knock! Knock!";
if (currentJoke == (clues.length - 1)) {
currentJoke = index;
}
else {
// System.out.println("index:::"+index);
while (validate.contains(index)) {
index = random.nextInt(clues.length);
// System.out.println("generated index:::"+index);
}
// index = random.nextInt(clues.length);
validate.add(index);
currentJoke = index;
}
state = SENTKNOCKKNOCK;
} else {
theOutput = "Bye.";
state = WAITING;
}
}
return theOutput;
}
}
test.json
[{
"clue":"Turnip",
"answer":"Turnip the heat, it's cold in here!"
},
{
"clue":"Little Old Lady",
"answer":"I didn't know you could yodel!"
},
{
"clue":"Atch",
"answer":"Bless you!"
},
{
"clue":"Who",
"answer":"Is there an owl in here?"
},
{
"clue":"Who",
"answer":"Is there an echo in here?"
}]
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started