diff options
Diffstat (limited to 'Week5 Quiz/src/week5')
-rw-r--r-- | Week5 Quiz/src/week5/MCQuestion.java | 81 | ||||
-rw-r--r-- | Week5 Quiz/src/week5/OpenQuestion.java | 32 | ||||
-rw-r--r-- | Week5 Quiz/src/week5/Question.java | 56 | ||||
-rw-r--r-- | Week5 Quiz/src/week5/TCQuestion.java | 40 | ||||
-rw-r--r-- | Week5 Quiz/src/week5/Week5.java | 106 |
5 files changed, 315 insertions, 0 deletions
diff --git a/Week5 Quiz/src/week5/MCQuestion.java b/Week5 Quiz/src/week5/MCQuestion.java new file mode 100644 index 0000000..86869c5 --- /dev/null +++ b/Week5 Quiz/src/week5/MCQuestion.java @@ -0,0 +1,81 @@ +package week5; + +import java.util.Random; + +/** + * Class for multiple choice questions + * + * Note: for 2-choice questions the TCQuestion class should be used. + * + * @author Camil Staps, s4498062 + */ +public class MCQuestion extends Question { + + protected final String[] answers; + protected final int correctAnswer; + + /** + * Construct a new instance + * + * @param question the question + * @param answers array of the answer + * @param correctAnswer index for answers pointing to the correct answer + * @param weight weight of the question + */ + public MCQuestion (String question, String[] answers, int correctAnswer, int weight) { + this.question = question; + this.answers = answers; + this.correctAnswer = correctAnswer; + setWeight(weight); + } + + /** See the javadoc on the constructor above */ + public MCQuestion (String question, String[] answers, int correctAnswer) { + this.question = question; + this.answers = answers; + this.correctAnswer = correctAnswer; + } + + @Override + public boolean isCorrect(String answer) { + return correctAnswer == (answer.charAt(0) - 'A'); + } + + @Override + public String juisteAntwoord() { + return answers[correctAnswer]; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(super.toString()); + sb.append("\n"); + int i = 0; + for (String a : answers) { + sb.append((char) ('A' + i++)).append(": ").append(a).append("\n"); + } + sb.deleteCharAt(sb.length() - 1); + return sb.toString(); + } + + /** + * For this type of questions, duplicating randomizes the order of the answers. + * + * @return A new instance of the MCQuestion class with the same parameters, just another order of the answers. + */ + @Override + public Question duplicate() { + Random r = new Random(); + int shift = r.nextInt(answers.length - 1) + 1; + + String[] new_answers = new String[answers.length]; + for (String a : answers) { + new_answers[shift++ % answers.length] = a; + } + + int new_correctAnswer = (correctAnswer + shift) % answers.length; + + return new MCQuestion(question, new_answers, new_correctAnswer, weight); + } + +} diff --git a/Week5 Quiz/src/week5/OpenQuestion.java b/Week5 Quiz/src/week5/OpenQuestion.java new file mode 100644 index 0000000..4f154ea --- /dev/null +++ b/Week5 Quiz/src/week5/OpenQuestion.java @@ -0,0 +1,32 @@ +package week5; + +/** + * Class for open questions + * + * @author Camil Staps, s4498062 + */ +public class OpenQuestion extends Question { + + private final String answer; + + public OpenQuestion(String question, String answer, int weight) { + this.question = question; + this.answer = answer; + setWeight(weight); + } + + public OpenQuestion(String question, String answer) { + this.question = question; + this.answer = answer; + } + + @Override + public boolean isCorrect(String answer) { + return answer.equalsIgnoreCase(this.answer); + } + + @Override + public String juisteAntwoord() { + return answer; + } +} diff --git a/Week5 Quiz/src/week5/Question.java b/Week5 Quiz/src/week5/Question.java new file mode 100644 index 0000000..3b05414 --- /dev/null +++ b/Week5 Quiz/src/week5/Question.java @@ -0,0 +1,56 @@ +package week5; + +/** + * Abstract class for quiz questions + * + * @author Camil Staps, s4498062 + */ +public abstract class Question { + + protected String question = ""; + protected int weight = 3; + + @Override + public String toString() { + return question + " (pt: " + weight + ")"; + } + + /** + * Checks if a given answer is correct + * + * @param answer the answer to check + * @return true iff the answer is correct + */ + public abstract boolean isCorrect(String answer); + + /** + * Returns the correct answer + * + * @return the correct answer + */ + public abstract String juisteAntwoord(); + + /** + * Set the weight of this question (succeeds only if 0 < weight < 6) + * + * @param weight the new weight + */ + protected void setWeight(int weight) { + if (weight > 0 && weight < 6) { + this.weight = weight; + } + } + + public int getWeight() { + return weight; + } + + /** + * Create a new instance with the same parameters + * + * @return the new question + */ + public Question duplicate() { + return this; + } +} diff --git a/Week5 Quiz/src/week5/TCQuestion.java b/Week5 Quiz/src/week5/TCQuestion.java new file mode 100644 index 0000000..f89240c --- /dev/null +++ b/Week5 Quiz/src/week5/TCQuestion.java @@ -0,0 +1,40 @@ +package week5; + +/** + * Class for 2-choice questions + * + * Note: for 3+-choice questions one can use MCQuestion. + * + * @author Camil Staps, s4498062 + */ +public class TCQuestion extends MCQuestion { + + /** + * Construct a new TCQuestion instance + * + * @param question the question + * @param answer1 the first answer + * @param answer2 the second answer + * @param correctAnswer 0 if answer1 is correct, 1 if answer2 is correct + * @param weight the weight for this question + */ + public TCQuestion (String question, String answer1, String answer2, int correctAnswer, int weight) { + super(question, new String[] {answer1, answer2}, correctAnswer, weight); + } + + /** See the javadoc on the constructor above */ + public TCQuestion (String question, String answer1, String answer2, int correctAnswer) { + super(question, new String[] {answer1, answer2}, correctAnswer); + } + + /** + * For TCQuestions we don't need to randomize the answers. + * + * @return the new question + */ + @Override + public Question duplicate() { + return this; + } + +} diff --git a/Week5 Quiz/src/week5/Week5.java b/Week5 Quiz/src/week5/Week5.java new file mode 100644 index 0000000..24f91b2 --- /dev/null +++ b/Week5 Quiz/src/week5/Week5.java @@ -0,0 +1,106 @@ +package week5; + +import java.util.LinkedList; +import java.util.List; +import java.util.Scanner; + +/** + * Uitwerking voor week 5 + * + * @author Camil Staps, s4498062 + */ +public class Week5 { + + private final List<Question> questions = new LinkedList<Question>(); + private final List<Question> questions_2 = new LinkedList<Question>(); + + private int score_round1 = 0; + private int score_round2 = 0; + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + Week5 w5 = new Week5(); + w5.play(); + } + + /** + * Add default questions + */ + public Week5() { + questions.add(new OpenQuestion("Wat is de complexiteit van binair zoeken?", "O(log N)")); + questions.add(new OpenQuestion("Hoe lees je in Java een integer i uit een scanner s?", "i = s.nextInt();", 2)); + questions.add(new OpenQuestion("Is er verschil tussen een interface en een abstracte klasse?", "Ja", 5)); + questions.add(new OpenQuestion("Hoeveel constructoren je minstens maken bij een klasse in Java?", "0", 2)); + questions.add(new OpenQuestion("Is er een maximum aantal constructoren van een klasse in Java?", "Nee")); + + questions.add(new MCQuestion("Wat is de complexiteit van slim in situ sorteren?", new String [] { + "O(N^2)", + "O(N log N)", + "O(N)", + "O(log N)"}, 1, 4)); + questions.add(new MCQuestion("Hoe print je \"Hello world\" op een regel in Java?", new String [] { + "System.out.print(\"Hello world\");", + "System.out.println(\"Hello world\");", + "cout << \"Hello world\";"}, 1)); + questions.add(new MCQuestion("Hoe lees je in Java een niet leeg woord uit scanner s?", new String []{ + "s.nextline()", + "s.next(\"\\S+\")", + "s.next(\"\\a*\")", + "s.next(\"\\S*\")", + "s.next(\"\\\\s+\")", + "s.next(\"\\s+\")", + "s.nextString(\"\\s*\")", + "s.next(\"\\\\S+\")", + "s.nextString()"}, 7, 1)); + + questions.add(new TCQuestion("Deze opgave is eigenlijk niet zo moeilijk.", "Juist", "Onjuist", 0, 5)); + } + + private void play() { + round1(); + System.out.println(); + round2(); + System.out.println(); + + System.out.println("Score ronde 1: " + score_round1); + System.out.println("Score ronde 2: " + score_round2); + } + + private void round1() { + Scanner sc = new Scanner(System.in); + + for (Question q : questions) { + System.out.println(q); + if (q.isCorrect(sc.nextLine())) { + System.out.println("Goed zo!\n"); + score_round1 += q.getWeight(); + } else { + System.out.println("Helaas...\n"); + questions_2.add(q.duplicate()); + } + } + } + + private void round2() { + Scanner sc = new Scanner(System.in); + + if (!questions_2.isEmpty()) { + System.out.println("Je krijgt een herkansing voor de " + questions_2.size() + " vragen die je zojuist fout had.\n"); + + for (Question q : questions_2) { + System.out.println(q); + if (q.isCorrect(sc.nextLine())) { + System.out.println("Goed zo!\n"); + score_round2 += q.getWeight(); + } else { + System.out.println("Helaas... het juiste antwoord was: " + q.juisteAntwoord() + "\n"); + } + } + } else { + System.out.println("Alle vragen goed!"); + } + } + +} |