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 validate = new HashSet<>();

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

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!