Search code examples
javaeclipseacm-java-libraries

Java do-while loop inside a method in its own class


I'm pretty new to java and we didn't really go over the methods but its required for the project. I am trying to place the whole two do-while loops into a method that I can call off within the public void run(). Could someone please guide me out how I can accomplish it? I am trying to place this nested loop with inner and outer do-while loops inside its own method possibly within its own class also

Here is the full code:
The section where the do loop starts I'm trying to place it in its own method and how do I go by accomplishing that?

App.java

import acm.program.*;

public class App extends ConsoleProgram 
{
    public void init()
    {
        setSize(300,600);
    }
    public void run()
    {
        //  Counter variables
        int n = 0;
        int counter = 0;
        int score = 0;

        n = readInt("How many times did you take this quiz: ");

        /*
         * Printing questions
         */

        //  First Question
        Questions questionOne = new Questions();
        println(" ");
        questionOne.SetQuestion("Question 1: ");
        questionOne.SetChoice1("Answer a: ");
        questionOne.SetChoice2("Answer b: ");
        questionOne.SetChoice3("Answer c: ");
        questionOne.SetChoice4("Answer d: ");
        questionOne.SetCorrectAnswer("b");

        //  Second Question
        Questions questionTwo = new Questions();
        println(" ");
        questionTwo.SetQuestion("Question 2: ");
        questionTwo.SetChoice1("Answer a: ");
        questionTwo.SetChoice2("Answer b: ");
        questionTwo.SetChoice3("Answer c: ");
        questionTwo.SetChoice4("Answer d: ");
        questionTwo.SetCorrectAnswer("d");

        //  Third Question (Hard Question)
        Questions questionThree = new Questions();
        println(" ");
        questionThree.SetQuestion("Question 3:  ");
        questionThree.SetChoice1("Answer a: ");
        questionThree.SetChoice2("Answer b: ");
        questionThree.SetChoice3("Answer c: ");
        questionThree.SetChoice4("Answer d: ");
        questionThree.SetCorrectAnswer("a");

        // CREATE A METHOD FOR THIS DO-WHILE LOOP. 
        do
        {
            if ( n <= 3 )
            {
                println("You may now take the quiz!");
                println(" ");
            } 
            else 
            {
                println("You're out of quiz attempts. You have already taken it 3 times.");
                break;
            }

            do 
            {
            score = 0;

            if (counter==5)
            {
            println("You scored less than 100%");
            println("Take a break! You may retake the quiz on a later date. ");
            break;
            }

            // print question 1
            println(questionOne.PrintQuestion());

            // input answer for question number 1
            String yourAnswer = readLine("Your answer: ");
            println(" ");

            // check if the question 1 is correct, if it is, add 1 to the score++
            if (questionOne.IsAnswerCorrect(yourAnswer))
            {
                score++;
                println("You got it right!");   
            }
            else    // if its not correct, print you got it wrong
            {
                println("You got it wrong!");
                println(" ");
                println(" ");
            }

            // print question 2
            println(questionTwo.PrintQuestion());

            // input answer for question number 2
            String yourAnswer2 = readLine("Your answer: ");
            println(" ");

            // check if the question 2 is correct, if it is, add 1 to the score++
            if (questionTwo.IsAnswerCorrect(yourAnswer2))
            {
                score++;
                println("You got it right!");
            }
            else    // if its not correct, print you got it wrong
            {
                println("You got it wrong!");
                println(" ");
                println(" ");
            }

            // print question 3
            println(questionThree.PrintQuestion());

            // input answer for question number 3
            String yourAnswer3 = readLine("Your answer: ");
            println(" ");

            // checking for hard question. To make it easier, we're using boolean to check for the hard question
            boolean hardQuestion = false;

            // check if the question 3 is correct, if it is, add 1 to the score++ // hard question becomes true
            if (questionThree.IsAnswerCorrect(yourAnswer3))
             {
                score++; 
                println("You got it right!");
                println(" ");
                hardQuestion = true;
             }
             else
             {
                println("You got it wrong!");
                println(" ");
                println(" ");
             }
             if (score == 0)
             {
                 println("You need more practice!");
                 println(" ");
             }

             // if you got at least the hard one right, your score is of 1 and that is what gets printed out
             else if (score == 1)
             {
                 if (hardQuestion) 
                 {
                     println("Well, at least you got the hard one correct! ");
                     println(" ");
                 }
                 else
                 { 
                     // if the other ones are correct, print out this message if hard is wrong
                     println("You need to warm up!");
                     println(" ");
                 }
             }

             // if you got at least two correct
             else if (score == 2)
             {
                 if (hardQuestion) 
                 {
                     // user got one correct and hard one correct
                     println("You are amazing!");
                     println(" ");
                 }
                 else
                 { 
                     // if hard one was wrong
                     println("You're on your way!");
                     println(" ");
                 }
             }
             else
             {
                 // all answers are correct including the hard ones
                 println("You are a scholar!");
                 println(" ");
                 println("Congradulations you passed! You got 100% on the quiz!");
                 break;
             }
                // count number of tries the quiz has been looped
                counter++;  
                if (counter < 5)
                {
                    println("You scored less than 100%");
                    println(" ");
                    println(" ");
                    println("Try again!");
                    println(" ");
                }
            } while (true); // end program loop

            break;

        } while (true); // end while loop
    } // closing public run
} // closing public class

Private String questions code:

Questions.java

public class Questions {
    private String _question;
    private String _correctAnswer;
    private String _correctAnswer2;
    private String _correctAnswer3;
    private String _choice1, _choice2, _choice3, _choice4;


    public void SetQuestion(String q)
    {
        _question = q;
    }
    public String GetQuestion()
    {
        return _question;
    }

    public void SetCorrectAnswer(String c)
    {
        _correctAnswer = c;
    }

    public String GetCorrectAnswer()
    {
        return _correctAnswer;
    }

    public void SetCorrectAnswer2(String b)
    {
        _correctAnswer2 = b;
    }

    public String GetCorrectAnswer2()
    {
        return _correctAnswer2;
    }

    public void SetCorrectAnswer3(String a)
    {
        _correctAnswer3 = a;
    }

    public String GetCorrectAnswer3()
    {
        return _correctAnswer3;
    }

    public void SetChoice1(String a)
    {
        _choice1 = a;
    }

    public void SetChoice2(String b)
    {
        _choice2 = b;
    }

    public void SetChoice3(String c)
    {
        _choice3 = c;
    }
    public void SetChoice4(String d)
    {
        _choice4 = d;
    }
    public String PrintQuestion()
    {
        String result = " ";

        result = _question + "\n" + _choice1 + "\n" + _choice2 + "\n" + _choice3 + "\n" + _choice4 + "\n";
        return result;
    }

    public boolean IsAnswerCorrect(String a)
    {
        return _correctAnswer.equals(a);
    }



    /*public boolean IsAnswerCorrect2(String b)
    {   
        return _correctAnswer2.equals(b);
    }*/

    }

Solution

  • You can use this code or make necessary modifications as per your need, simply it has a method which takes an array of Questions and then performs operations by taking out questions from array

    import acm.program.*;
    
    public class App extends ConsoleProgram 
    {
    
            int n = 0;
            int counter = 0;
            int score = 0;
    
    
        public void init()
        {
            setSize(300,600);
        }
        public void run()
        {
            //  reset counter variables
            n = 0;
            counter = 0;
            score = 0;
    
            n = readInt("How many times did you take this quiz: ");
    
            /*
             * Printing questions
             */
    
            //  First Question
            Questions questionOne = new Questions();
            println(" ");
            questionOne.SetQuestion("Question 1: ");
            questionOne.SetChoice1("Answer a: ");
            questionOne.SetChoice2("Answer b: ");
            questionOne.SetChoice3("Answer c: ");
            questionOne.SetChoice4("Answer d: ");
            questionOne.SetCorrectAnswer("b");
    
            //  Second Question
            Questions questionTwo = new Questions();
            println(" ");
            questionTwo.SetQuestion("Question 2: ");
            questionTwo.SetChoice1("Answer a: ");
            questionTwo.SetChoice2("Answer b: ");
            questionTwo.SetChoice3("Answer c: ");
            questionTwo.SetChoice4("Answer d: ");
            questionTwo.SetCorrectAnswer("d");
    
            //  Third Question (Hard Question)
            Questions questionThree = new Questions();
            println(" ");
            questionThree.SetQuestion("Question 3:  ");
            questionThree.SetChoice1("Answer a: ");
            questionThree.SetChoice2("Answer b: ");
            questionThree.SetChoice3("Answer c: ");
            questionThree.SetChoice4("Answer d: ");
            questionThree.SetCorrectAnswer("a");
    
            evaluate(new Questions[]{questionOne,questionTwo,questionThree});
    
        } // closing public run
    
    private void evaluate(Questions[] q){
     //  METHOD FOR DO-WHILE LOOP. 
            do
            {
                if ( n <= 3 )
                {
                    println("You may now take the quiz!");
                    println(" ");
                } 
                else 
                {
                    println("You're out of quiz attempts. You have already taken it 3 times.");
                    break;
                }
    
                do 
                {
                score = 0;
    
                if (counter==5)
                {
                println("You scored less than 100%");
                println("Take a break! You may retake the quiz on a later date. ");
                break;
                }
    
                // print question 1
                println(q[0].PrintQuestion());
    
                // input answer for question number 1
                String yourAnswer = readLine("Your answer: ");
                println(" ");
    
                // check if the question 1 is correct, if it is, add 1 to the score++
                if (q[0].IsAnswerCorrect(yourAnswer))
                {
                    score++;
                    println("You got it right!");   
                }
                else    // if its not correct, print you got it wrong
                {
                    println("You got it wrong!");
                    println(" ");
                    println(" ");
                }
    
                // print question 2
                println(q[1].PrintQuestion());
    
                // input answer for question number 2
                String yourAnswer2 = readLine("Your answer: ");
                println(" ");
    
                // check if the question 2 is correct, if it is, add 1 to the score++
                if (q[1].IsAnswerCorrect(yourAnswer2))
                {
                    score++;
                    println("You got it right!");
                }
                else    // if its not correct, print you got it wrong
                {
                    println("You got it wrong!");
                    println(" ");
                    println(" ");
                }
    
                // print question 3
                println(q[2].PrintQuestion());
    
                // input answer for question number 3
                String yourAnswer3 = readLine("Your answer: ");
                println(" ");
    
                // checking for hard question. To make it easier, we're using boolean to check for the hard question
                boolean hardQuestion = false;
    
                // check if the question 3 is correct, if it is, add 1 to the score++ // hard question becomes true
                if (q[2].IsAnswerCorrect(yourAnswer3))
                 {
                    score++; 
                    println("You got it right!");
                    println(" ");
                    hardQuestion = true;
                 }
                 else
                 {
                    println("You got it wrong!");
                    println(" ");
                    println(" ");
                 }
                 if (score == 0)
                 {
                     println("You need more practice!");
                     println(" ");
                 }
    
                 // if you got at least the hard one right, your score is of 1 and that is what gets printed out
                 else if (score == 1)
                 {
                     if (hardQuestion) 
                     {
                         println("Well, at least you got the hard one correct! ");
                         println(" ");
                     }
                     else
                     { 
                         // if the other ones are correct, print out this message if hard is wrong
                         println("You need to warm up!");
                         println(" ");
                     }
                 }
    
                 // if you got at least two correct
                 else if (score == 2)
                 {
                     if (hardQuestion) 
                     {
                         // user got one correct and hard one correct
                         println("You are amazing!");
                         println(" ");
                     }
                     else
                     { 
                         // if hard one was wrong
                         println("You're on your way!");
                         println(" ");
                     }
                 }
                 else
                 {
                     // all answers are correct including the hard ones
                     println("You are a scholar!");
                     println(" ");
                     println("Congradulations you passed! You got 100% on the quiz!");
                     break;
                 }
                    // count number of tries the quiz has been looped
                    counter++;  
                    if (counter < 5)
                    {
                        println("You scored less than 100%");
                        println(" ");
                        println(" ");
                        println("Try again!");
                        println(" ");
                    }
                } while (true); // end program loop
    
                break;
    
            } while (true); // end while loop
    }
    
    } // closing public class