22
33import java .util .ArrayList ;
44import java .util .Arrays ;
5+ import java .util .InputMismatchException ;
6+ import java .util .List ;
57import java .util .Scanner ;
68
79public 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