简体   繁体   中英

How to ask user if he/she wants to quit the program and print out the thank you message in Java

I am taking the first Java class and working on my second project. The project is about creating an program as a network of rooms on a virtual three-dimensional work area. Each room provides a virtual environment that together can be assemble into a simulated or virtual world. Basically, the beginning of the program, I used while loop, and at the end I want to ask user if he/she wants to quit the program, and print a thank you message. However, the while loop does not work. My program quit no matter I entered y or n. Below is my codes.

import java.util.Scanner;


public class Project 
{
public static void main(String[] args)
{
    Map map = new Map();
    int floor = 0;
    int row = 0;
    int col = 0;
    String input = " ";

    Scanner scan = new Scanner(System.in);

    // Begin user dialog. Welcome message
    System.out.println("Welcome to the L.A Underground! (Verson 1.1)");
    System.out.println();

    String choice = "y";
    while(!input.equalsIgnoreCase("quit"))
    {
      input = scan.nextLine().toLowerCase();
    // My codes are here
   if (input.equals("south")
        {statement}
            else
                System.out.println("You can't go that way.");

   else if (input.equals("quit"))
        {   // See if user wants to continue
        System.out.println("Do you wish to leave the Underground (Y/N)? >");
        choice = scan.nextLine();
        System.out.println();
        }
   // if user enters other words than quit
    else
        System.out.println("I don't recognize the word '" + input +"'");
      }
       System.out.println("Thank you for visiting L.A Underground.");
    }
  }

When I typed "quit" the console printed the message: "Do you wish to leave the Underground? (Y/N)? >". I tried Y/N (y/n) the program terminated. Any help is appreciated. Thank you.

Updated: Sorry for the confusion. What I wanted the program to run is when the user types "quit", the message will print out "Do you wish to leave the Underground (Y/N)?>?" , and if the user types "hello", the message will be "I don't understand the word 'hello'". And when the user type y, the program will quit, otherwise (type n), the program will start over again. Thank you!

Ask for user input inside of your loop. If input.equalsIgnoreCase("quit") , then prompt the user an "are you sure" message. If the input.equalsIgnoreCase("y") , then break the loop, otherwise, keep going.

    Scanner scan = new Scanner(System.in);
    String input;

    // Begin user dialog. Welcome message
    System.out.println("Welcome to the L.A Underground! (Verson 1.1)");
    System.out.println();

    while (true) {
        input = scan.nextLine();
        if (input.equalsIgnoreCase("quit")) {
            System.out.print("Do you wish to leave the Underground (Y/N)? >");
            if (scan.nextLine().equals("y")) {
                break;
            }
        }
        // input wasn't "quit", so do other stuff here
    }
    System.out.println("Thank you for visiting L.A Underground.");

Your code loops until it gets "quit" ... then asks for "yes/no" ... then simply exits, regardless.

You need to change your loop, so that it includes BOTH "MY CODES HERE" AND the "quit y/n" check.

EXAMPLE:

...
boolean done = false;
while(!done) {
  //MY CODES ARE HERE
  if (input.equalsIgnoreCase("quit") && getYesNo ()) == 'y') {
    done = true;
  }
}

"getYesNo()" is a method you write. For example:

char getYesNo () {
  System.out.print("Do you wish to leave the Underground (Y/N)? >");
  String line = scan.nextLine();
  return line.charAt(0);
}

In the code you've posted, your loop is being controlled by the condition !input.equalsIgnoreCase("quit") . That is, if input is "quit", the loop is terminated.

But the following block is executed only if input is "quit":

if (input.equals("quit"))
{   
    // See if user wants to continue
    System.out.println("Do you wish to leave the Underground (Y/N)? >");
    choice = scan.nextLine();
    System.out.println();
}

So if this block is executed, !input.equalsIgnoreCase("quit") evaluates to false and the loop is terminated. And that's not what you want.

Now that you know what's wrong, fixing it is easy. Check the value of choice in the above if block: if choice is not yes, don't quit ie reset input to a default value.

I've pasted the working code here on pastebin .

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM