Как проверить, ввел ли пользователь что-то перед выбором другого варианта? - PullRequest
0 голосов
/ 29 октября 2019

У меня есть задание, и я должен написать программу, которая показывает меню ресторана пользователю, идея этого задания заключается в использовании циклов в Java.

Одним из требований для программы является то, чтоПрограмма должна проверить, заказал ли пользователь что-то из меню продуктов питания, прежде чем выбрать меню доставки или сводку, и если пользователь сделал это, я должен дать ему сообщение, которое гласит: «сначала вы должны заказать» или «вы не заказали». пока ".

Но я не могу придумать более продвинутый способ сделать это, потому что я все еще студент и начинающий программист, и мне разрешено использовать только циклы, если и операторы switch и некоторые другиеосновные методы.

Вот что я сделал:

 do {

    System.out.println(" ------------------------------------ ");
    System.out.println("                WELCOM                ");
    System.out.println(" ------------------------------------ ");
    System.out.println(" a. Food Ordering ");
    System.out.println(" b. Delivery ");
    System.out.println(" c. Summary And Exit ");
    System.out.print(" Please enter your choice : ");

    choice = x.nextLine();
    C = choice.charAt(0);

    if (C == 'a' || C == 'b' || C == 'c' || C == 'A' || C == 'B' || C == 'C'){
    switch (C) {

        case 'a':
        case 'A':
            int qua ;
            int CHOICE ;
            int choicee = 0 ;
            int SUM = 0 ;
            do {
            System.out.println(" ------------------------------------ ");
            System.out.println("              Food Menu               ");
            System.out.println(" ------------------------------------ ");
            System.out.println("1.  Chicken Burger           12 SR ");
            System.out.println("2.  Beef Burger              15 SR ");
            System.out.println("3.  Mac And Cheese           10 SR ");
            System.out.println("4.  Cesar Salad              11 SR ");
            System.out.println("5.  House Salad              10 SR ");
            System.out.println("6.  Fries                    7 SR ");
            System.out.println("7.  Soft Drink               3 SR ");
            System.out.println(" Enter your choice (1 to 7) or -1 to exit : ");

            CHOICE = x.nextInt() ;

             switch (CHOICE){

                 case 1 : choicee = 12;break;
                 case 2 : choicee = 15;break;
                 case 3 : choicee = 10;break;
                 case 4 : choicee = 11;break;
                 case 5 : choicee = 10;break;
                 case 6 : choicee = 7;break;
                 case 7 : choicee = 3;break;
             }

             if ( 1 <= CHOICE && CHOICE <= 7) {

                 SUM += choicee ;
                 do{
                 System.out.print( " Enter quantities : " );
                 qua = x.nextInt();
                 }while( qua <= 0 );
                 SUM *= qua ;
             }else if ( CHOICE == -1 ){
                 System.out.println( SUM );
                 break ;
             }else if ( CHOICE != -1 || 1 <= CHOICE && CHOICE <= 7){
                 System.out.println(" ********** Wrong Entry.Try Again ********** ");
             }

            }while(true);

            break;

        case 'b':
        case 'B':

   }

Программа еще не завершена, это только ее часть.

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Прежде всего, добро пожаловать в SO.

Чтобы ответить на ваш вопрос напрямую, вы можете использовать логические значения, чтобы отслеживать, какое меню использовал клиент, как @Carlos López Marí прокомментировал ваш вопрос или решение @Joakim Danielson,

Кроме того, позвольте мне также предложить вам несколько рекомендаций, поскольку вы упоминаете, что вы все еще неопытны:

A. Используйте методы для инкапсуляции основной части ваших операторов печати, то есть метод для печати «приветствия» и первой партии сообщений, другой для печати пунктов меню и т. Д. То же самое относится к любой части логики, которая может быть на егособственный или повторяемый, т. е. логика после выбора A, B или C, а затем на сумму. Представьте, что основной метод считан как шаги, которые предпримет клиент. Это облегчит чтение вашего кода и обнаружит ошибки, если они есть. Например:

    ...
    do{
        printWelcomeMessage();
        choice = x.nextLine().toLowercase();
        C = choice.charAt(0);

        if(C == 'a' || C == 'b' || C == 'c'){
            chooseFoodItems();
        }
    }...

B. Используйте коллекцию для каталога цен. Если вы можете использовать HashMap для сопряжения товаров с ценами, это сделает ваши распечатки и распределение затрат более удобными и простыми для расчета. Если вы не можете использовать HashMap, вы можете вместо этого использовать 2 таблицы, одну с именами и одну с ценами.

C. Вы можете изменить свой x.nextLine(); на x.nextLine().toUppercase() (или нижний регистр), чтобы упростить операторы переключения.

D. Хотя это и не так важно, при сравнении чисел принято делать 0 < CHOICE && CHOICE < 8 вместо 1 <= CHOICE && CHOICE <= 7 (например, в цикле for мы обычно делаем это как for(int i=0; i < limit; i++)

E. Попробуйте упростить логику вашего кодастолько, сколько вы можете. Будет легче написать, прочитать и поработать с ним вообще.

0 голосов
/ 29 октября 2019

Измените нижнюю часть вашего цикла while на

    } else if ( CHOICE == -1 ){
         if (SUM > 0) {
             System.out.println( SUM );         
             break ;
         } else {
             System.out.println( "You have to order first" );  
         }                     
    } else if ( CHOICE != -1 || 1 <= CHOICE && CHOICE <= 7){
         System.out.println(" ********** Wrong Entry.Try Again ********** ");
    }
} while(true);

Это, безусловно, может быть улучшено и дальше, но оно должно быть достаточно хорошим, чтобы помочь вам двигаться вперед

...