Alex_E
Alex_E

Reputation: 39

How to stop the method continuously looping

I am currently trying to complete a program with multiple classes in java that will allow the user to input information to help him or her book tickets, accommodation, parking, etc for a rock festival. I have started with one of the classes 'accommodation' to return the correct input of the user to the main class, however, I have found when I run the program and enter option 3, it immediately loops continuously which I have to terminate. I have searched online for a way to stop the loop, and for it to return the correct inputted information to no avail, I would appreciate any help to a very new new noob, before this loop turns me loopy! Below is my main class and the class 'accommodation'. thank you in advance and apologies for any messy coding I have, as I have been trying various options as I have said before.

import java.util.Scanner;
import java.util.InputMismatchException;

public class clydeRockfest {

public static void main(String[] args) {




    boolean quit = false;
    Scanner in = new Scanner(System.in);
    int choice;    // Display the menu
    int answer = 0;

    Accommodation accommodation = new Accommodation();
    //accommodation.getaccommodation();


    do{

    System.out.println("1\t Festgoers");
    System.out.println("2\t Ticket");
    System.out.println("3\t Accommodation");
    System.out.println("4\t Transport");
    System.out.println("5\t Parking");
    System.out.println("0\t Quit");


    System.out.println("Please enter your choice:");

    //Get user's choice
    choice=in.nextInt();
     if(choice == 0)
         quit=true;


    //Display the title of the chosen module
    switch (choice) {

   break;

        case 3: accommodation.getaccommodation();
            System.out.println("You require " + answer + " accommodation."); 
   break;


        case 0: 
            quit=true;
   break;

        default: System.out.println("Invalid choice, please choose again.");

    } //end of switch
} //end of the main method
    while(!quit);
} //end of class

}


public class Accommodation {

     private String accommodation;

     void getaccommodation(){


        int no = 0;   // no accommodation at all required
        int self_Pitch = 0;  // chosen if requiring a pitch
        int tent = 0;  // chosen if using a tent
        int answer = 0;
        int choice = 0;

        boolean done = false;


        System.out.println("Do you require accommodation?");
        System.out.println();

        // Answer validation loop
        boolean validanswer = true;
        while (!validanswer){   

        System.out.println("Enter:(1=NO, 2=SELF-PITCH, 3=TENT)");
        System.out.println();


        if(answer > 0 && answer < 4){
            validanswer = true;
            done = true;
        }// ends if
        else{
        System.out.println();
        System.out.println("That is not a valid answer, please choose again:");
        System.out.println();

        }   // ends else
    } //ends while
}

        public void setaccommodation(String accommodation){
        this.accommodation = accommodation;
       }

Output:

Please enter your choice:
3
Do you require accommodation?

You require 0 accommodation.
1    Festgoers
2    Ticket
3    Accommodation
4    Transport
5    Parking
0    Quit
Please enter your choice:

Upvotes: 1

Views: 994

Answers (3)

You never set done to true. It seems you may need to do it here:

if(answer >=0 && answer <=4){
    validanswer = true;
    done = true;
}
else{
    //code
}

However, I'm not even sure you need that outer loop in the first place:

while(!done){

It seems redundant.

Upvotes: 0

Keppil
Keppil

Reputation: 46219

You have two loops checking if user is done, and the condition of the first one (with the done) variable is never changed. Just remove this loop, and you should be fine.

Also, it looks like the condition for the second loop variable should be

if (answer > 0 && answer < 4)

to match your menu alternatives.

Upvotes: 0

thermite
thermite

Reputation: 512

you prime your loop by setting done=false but never set done = true so your loop will never end

Upvotes: 1

Related Questions