Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass...
-
Upload
juniper-peters -
Category
Documents
-
view
213 -
download
0
Transcript of Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass...
![Page 1: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/1.jpg)
Quizard
step-by-step
![Page 2: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/2.jpg)
Start with the questions
• The Question class is abstract– a Superclass
• You’ll never create something that’s just a question.
• It’ll always be a specific type of question
![Page 3: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/3.jpg)
Top-Down Design:refinement
Questions —
Classes that represent different types of questions.
«abstract»Question
MCQuestion TFQuestion
FRQuestion
TestQuestion
Create a test case for testing in isolation
![Page 4: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/4.jpg)
Question class
• What does every question have?• These are the kinds of questions:
1. multiple choice2. true/false3. and free response
• They all have:– the words describing the question (including a
description of answer choices if appropriate)– correct answer– point value
![Page 5: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/5.jpg)
constructor
• Always 3 parameters given:– question, answer and number of points are all
initialized when the question is created.
• never changed.
• don’t need mutators
• only accessors
![Page 6: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/6.jpg)
«abstract»Question
String questionString answer
int points
MCQuestion TFQuestion
FRQuestion
What methods do all questions have in common?
Accessors:
getQuestion()
getAnswer()
getPoints()
A way to display the question
toString()
/** * Compare this question's correct answer with the entered answer * @param userAns the entered answer (in upper case) * @return 1 if userAns matches this question's answer, 0 if there is no match, * and -1 if userAns is invalid */ public abstract int compareAns(String ans);
Each subclass must define compareAns for that particular type of question.
NOT defined in Question
![Page 7: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/7.jpg)
Fill in the code for the Question class
Accessors:
getQuestion()
getAnswer()
getPoints()
A way to display the question
toString()
abstract method
public abstract int compareAns(String ans);
«abstract»Question
String questionTextString answerText
int numPoints
![Page 8: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/8.jpg)
«abstract»Question
String questionTextString answerText
int numPoints
MCQuestion
ArrayList ansOpts
TFQuestion
FRQuestion
How are the question subclasses unique?
Answer Options:
MC = ArrayList of choices
TF = always T/F, part of the question text
FR = no answer option given, user must enter
Some way to display the question
toString(), same for TF and MC, different for MC
/** * Compare this question's correct answer with the entered answer*/ public int compareAns(String ans)MC = user enters a letter, must be A-F (ignore case) compare to correct letter answerTF = user enters a letter, must be T or F, compare to correct letter answerFR= user enters words, to keep it simple, only an exact match counts (ignoring case)
![Page 9: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/9.jpg)
Examples TF
From the text file:
TF 3Q: True or false: The chicken crossed the road to get to the other sideA: T
Question tester = new TFQuestion(“True or false: The chicken crossed the road to get to the other side”, “T”,3);
tester.getPoints(); // = 3 inherited from Question
tester.compareAnswer(“F”); // = 0, doesn’t match, TF method
tester.getAnswer(); // = “T” inherited from Question
«abstract»Question
String questionTextString answerText
int numPoints
TFQuestion
![Page 10: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/10.jpg)
only code needed for TF• constructor: call the superclass, assume you are given question,
answer and points as parameters to the constructor.
• public int compareAns(String userAns)• {• if they didn’t answer T or F• return -1; // Invalid answer• else if the user answer = the correct answer• return 1; // correct• else• return 0; // incorrect• }
make TFQuestion
«abstract»Question
String questionTextString answerText
int numPoints
TFQuestion
![Page 11: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/11.jpg)
Examples FR
From the text file:
FR 3Q: Name a random integer between 2.5 and 3.5A: 3
Question tester = new FRQuestion(“Name a random integer between 2.5 and 3.5”, “3”,3);
tester.getPoints(); // = 3
tester.compareAnswer(“8”); // = 0, doesn’t match
tester.getAnswer(); // = “3”
![Page 12: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/12.jpg)
only code needed for FR
• constructor: call the superclass, assume you are given question, answer and points as parameters to the constructor.
• public int compareAns(String userAns)• {• if the user answer = the correct answer
(ignoring any differences in case)• return 1; // correct• else• return 0; // incorrect• }
make FRQuestion
«abstract»Question
String questionTextString answerText
int numPoints
FRQuestion
![Page 13: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/13.jpg)
Examples MCFrom the text file:
MC 8Q: What is encapsulation? A. Being abducted by a UFO B. A 20-second news report on MSNBC C. Calling String's toUpperCase() D. Making all data members of a class privateA: D
When constructing a MC question public MCQuestion(String qtn, ArrayList options, String ans, int pts) { call the superclass constructor to make a question setting qtn, ans and pts instantiate the arraylist for this object copy all the items in the options arraylist into the instance variable arraylist }
MCQuestion
ArrayList ansOpts
write the constructor for a MCQuestion
![Page 14: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/14.jpg)
getQuestion for MCoverrides getQuestion in Question
MCQuestion
ArrayList ansOpts
public String getQuestion() {String str; start by calling getQuestion() from superclass and adding an end-of-line character to it to create the string. for (a counter goes from 0 to the size of the ansOpts arraylist) get the next ansOpt, add it to str with an end-of-line mark at the end of each. return str; }
write the getQuestion method for a MCQuestion
![Page 15: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/15.jpg)
• public int compareAns(String userAns)• {• if (the user answer is more than one letter long)• return -1; // invalid
• if (the user answer is not a letter from A to E)• return -1; // invalid
• if (the user answer is the same as the question answer)• return 1; // correct• else• return 0; // incorrect• }
Write the compareAns method for MCQuestion
![Page 16: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/16.jpg)
Test the questionsimport java.util.ArrayList;
public class TestQuestion{ public static void main(String[] args) { System.out.println("Testing Questions...\n");
/* Free-response question */
Question fr = new FRQuestion("What kind of question is this?", "FR", 7); System.out.println(fr); System.out.println("Compare answers (should be 0 1): " + fr.compareAns("XYZ") + " " + fr.compareAns("FR")); System.out.println();
/* True or false question */
Question tf = new TFQuestion("This is a true/false Question", "T", 5);
System.out.println(tf); System.out.println("Compare answers (should be -1 0 1): " + tf.compareAns("X") + " " + tf.compareAns("F") + " " + tf.compareAns("T")); System.out.println();
/* Multiple-choice question */
ArrayList options = new ArrayList(); options.add(" A. Free response"); options.add(" B. Multiple choice"); options.add(" C. True/false"); MCQuestion mc = new MCQuestion("What kind of question is this?", options, "B", 10); System.out.println(mc); System.out.println("Compare answers (should be -1 0 1): " + mc.compareAns("X") + " " + mc.compareAns("C") + " " + mc.compareAns("B")); System.out.println(); }
![Page 17: Quizard step-by-step. Start with the questions The Question class is abstract –a Superclass You’ll never create something that’s just a question. It’ll.](https://reader036.fdocuments.us/reader036/viewer/2022082816/56649f455503460f94c6648c/html5/thumbnails/17.jpg)
Test ReaderWhy test it? To take the time to look at the code and
methods used in reading the input file to understand them.
• public class TestReader• {• public static void main(String[] args)• {• QuizReader reader = new QuizReader("test.dat");
• Question qtn;• while ((qtn = reader.nextQuestion()) != null)• System.out.println(qtn);• }• }