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); } }