Skip to content

Commit 71934e9

Browse files
committed
complete
1 parent 8aa737a commit 71934e9

3 files changed

Lines changed: 58 additions & 54 deletions

File tree

inheritance/fun_with_quizzes/src/main/java/org/Launchcode/CheckboxQuestion.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.Launchcode;
22

3-
import org.Launchcode.Question;
43
import java.util.ArrayList;
54
import java.util.List;
65

inheritance/fun_with_quizzes/src/main/java/org/Launchcode/Quiz.java

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,37 @@
55
import java.util.Scanner;
66

77
public class Quiz {
8-
private final List<Question> questions = new ArrayList<>();
9-
private final Scanner scanner = new Scanner(System.in);
8+
private List<Question> questions;
9+
private Scanner scanner;
10+
11+
public Quiz() {
12+
this.questions = new ArrayList<>();
13+
this.scanner = new Scanner(System.in);
14+
}
1015

1116
public void addQuestion(Question question) {
1217
questions.add(question);
1318
}
1419

20+
// Method to retrieve the list of questions
21+
public List<Question> getQuestions() {
22+
return this.questions; // returns a reference to the list of questions
23+
}
24+
1525
public void runQuiz() {
26+
int score = 0;
1627
for (Question question : questions) {
1728
question.display();
1829
System.out.print("Your answer: ");
19-
String input = scanner.nextLine();
20-
Object answer = parseAnswer(question, input);
21-
if (question.checkAnswer(answer)) {
30+
String userAnswer = scanner.nextLine();
31+
if (question.checkAnswer(userAnswer)) {
2232
System.out.println("Correct!");
33+
score++;
2334
} else {
24-
System.out.println("Wrong!");
35+
System.out.println("Incorrect.");
2536
}
2637
}
38+
System.out.println("You scored " + score + " out of " + questions.size());
39+
scanner.close();
2740
}
28-
29-
private Object parseAnswer(Question question, String input) {
30-
if (question instanceof TrueFalseQuestion) {
31-
return input.trim().equalsIgnoreCase("true");
32-
} else if (question instanceof MultipleChoiceQuestion || question instanceof CheckboxQuestion) {
33-
if (question instanceof MultipleChoiceQuestion) {
34-
return Integer.parseInt(input.trim()) - 1; // Assuming user input is 1-indexed
35-
} else {
36-
String[] parts = input.trim().split("\\s*,\\s*");
37-
ArrayList<Integer> userAnswers = new ArrayList<>();
38-
for (String part : parts) {
39-
userAnswers.add(Integer.parseInt(part) - 1); // Assuming user input is 1-indexed
40-
}
41-
return userAnswers;
42-
}
43-
}
44-
return null;
45-
}
46-
47-
public List<Question> getQuestions() {
48-
return questions;
49-
}
50-
}
41+
}

inheritance/fun_with_quizzes/src/main/java/org/Launchcode/QuizRunner.java

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,52 +2,66 @@
22

33
import java.util.ArrayList;
44
import java.util.Arrays;
5+
import java.util.InputMismatchException;
6+
import java.util.List;
57
import java.util.Scanner;
68

79
public class QuizRunner {
810
public static void main(String[] args) {
911
Scanner scanner = new Scanner(System.in);
1012
Quiz quiz = new Quiz();
1113

12-
// Correctly creating and adding a multiple-choice question
1314
quiz.addQuestion(new MultipleChoiceQuestion(
1415
"What is the capital of France?",
1516
new ArrayList<>(Arrays.asList("London", "Berlin", "Paris", "Madrid")),
16-
2 // Index starts at 0; thus, Paris is at index 2
17+
2 // Correct index for Paris
1718
));
1819

1920
quiz.addQuestion(new CheckboxQuestion(
20-
"Select programming languages:",
21+
"Select programming languages (enter indices separated by commas, e.g., 1, 3):",
2122
new ArrayList<>(Arrays.asList("Java", "English", "Python", "Spanish")),
22-
new ArrayList<>(Arrays.asList(0, 2)) // Correct indices for Java and Python
23+
new ArrayList<>(Arrays.asList(0, 2)) // Java and Python
2324
));
2425

2526
quiz.addQuestion(new TrueFalseQuestion(
26-
"The Earth is flat.",
27+
"The Earth is flat. (true/false)",
2728
false
2829
));
2930

30-
// Iterating over questions and processing answers
31+
runQuiz(scanner, quiz);
32+
scanner.close();
33+
}
34+
35+
private static void runQuiz(Scanner scanner, Quiz quiz) {
3136
for (Question question : quiz.getQuestions()) {
32-
question.display(); // Corrected from question.equals() to display the question
33-
System.out.print("Your answer: ");
34-
if (question instanceof TrueFalseQuestion) {
35-
boolean userAnswer = scanner.nextLine().trim().equalsIgnoreCase("true");
36-
System.out.println(question.checkAnswer(userAnswer) ? "Correct!" : "Wrong!");
37-
} else if (question instanceof MultipleChoiceQuestion) {
38-
int userAnswer = Integer.parseInt(scanner.nextLine().trim()) - 1; // Assuming user enters 1-based index
39-
System.out.println(question.checkAnswer(userAnswer) ? "Correct!" : "Wrong!");
40-
} else if (question instanceof CheckboxQuestion) {
41-
String[] parts = scanner.nextLine().trim().split("\\s*,\\s*");
42-
ArrayList<Integer> userAnswers = new ArrayList<>();
43-
for (String part : parts) {
44-
userAnswers.add(Integer.parseInt(part) - 1); // Assuming user enters 1-based index
45-
}
46-
System.out.println(question.checkAnswer(userAnswers) ? "Correct!" : "Wrong!");
37+
question.display();
38+
try {
39+
System.out.print("Your answer: ");
40+
boolean isCorrect = processAnswer(scanner, question);
41+
System.out.println(isCorrect ? "Correct!" : "Wrong!");
42+
} catch (Exception e) {
43+
System.out.println("Invalid input: " + e.getMessage());
44+
System.out.println("Please try again.");
4745
}
48-
System.out.println(); // Adds a blank line for better readability between questions
46+
System.out.println();
4947
}
48+
}
5049

51-
scanner.close(); // Close the scanner to free resources
50+
private static boolean processAnswer(Scanner scanner, Question question) {
51+
if (question instanceof TrueFalseQuestion) {
52+
boolean userAnswer = scanner.nextLine().trim().equalsIgnoreCase("true");
53+
return question.checkAnswer(userAnswer);
54+
} else if (question instanceof MultipleChoiceQuestion) {
55+
int userAnswer = Integer.parseInt(scanner.nextLine().trim()) - 1;
56+
return question.checkAnswer(userAnswer);
57+
} else if (question instanceof CheckboxQuestion) {
58+
String[] parts = scanner.nextLine().trim().split("\\s*,\\s*");
59+
List<Integer> userAnswers = new ArrayList<>();
60+
for (String part : parts) {
61+
userAnswers.add(Integer.parseInt(part.trim()) - 1);
62+
}
63+
return question.checkAnswer(userAnswers);
64+
}
65+
return false;
5266
}
53-
}
67+
}

0 commit comments

Comments
 (0)