Как исправить мой цикл do while, чтобы меню появлялось снова и снова, пока пользователь не нажмет букву «Q»?

#java

#java

Вопрос:

Вот мой код:

 import java.util.Scanner;
// I want to call the menu function in my driver class and in a do while loop . 

public class Driver {

    public static void main(String[] args) {

        do {
            Scanner scanner = new Scanner(System.in);

            char choice = scanner.next().charAt(0);

        } while (choice == 'Q');// How to exit the menue

    }

    static void createNewEmployee() {
        System.out.println("What is the name of employee?");

    }

    static void process() {
        char choice;
        switch (choice) {

        case 'N':
            System.out.println("new employee");
            createNewEmployee();
            break;
        case 'P':
            System.out.println("Compute paychecks");
            break;
        case 'R':
            System.out.println("Raise Wages ");
            break;
        case 'L':
            System.out.println("List Employees ");
            break;
        default:
            System.out.println("Error");

        }
    }

}
  

Ответ №1:

Измените while (choice == 'q') на while (choice != 'q') . Подумайте об этом так: «если пользователь нажимает что-либо, кроме «q», продолжайте».

Комментарии:

1. Нет, проблема в том, как принимать пользовательский ввод снова и снова!

Ответ №2:

Я думаю, это поможет вам!!

 public static void main(String[] args) {
    char choice;
    do {
        Scanner scanner = new Scanner(System.in) ; 
        System.out.print("Press Any Key: N -- New, P -- Paycheck, R -- Raise Wages,-- List Employee, Q -- Quit: ");
        choice = scanner.next().charAt(0);
        process(choice);
    } while(choice !='Q');
}


static void process(char choice) {
    switch (choice) {
    case 'N':
        System.out.println("new employee");
        break;
    case 'P':
        System.out.println("Compute paychecks");
        break;
    case 'R':
        System.out.println("Raise Wages ");
        break;
    case 'L':
        System.out.println("List Employees ");
        break;
    case 'Q':
        System.out.println("Thanks!!");
        break;
    default:
        System.out.println("Error");
    }
}
  

Комментарии:

1. Я не думаю, что вам нужно создавать новое Scanner на каждой итерации цикла. Кроме того, Scanner объект должен быть закрыт после того, как вы закончили его использовать, т.Е. Вызвать метод close() класса Scanner .

2. Да, это сделает код более оптимальным. Спасибо!!