Попытка возврата программы в главное меню после того, как пользователь ответил «да», чтобы продолжить или завершить программу, и отобразить сообщение с итогом, если пользователь ответил «нет». - PullRequest
0 голосов
/ 24 апреля 2020
public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        boolean start = true;
        while(start)

                System.out.printf("%70s %n", " @@@@@     Zoos Australia     @@@@@ " + "\n");

                System.out.printf("%57s %n", "Main Menu" + "\n");

                System.out.printf("%72s %n", "Zoo has the following ticketing options:");

                System.out.print("\n");

                System.out.printf("%59s %n", "1 = Child (4-5 yrs)");
                System.out.printf("%59s %n", "2 = Adult (18+ yrs)");
                System.out.printf("%60s %n", "3 = Senior (60+ yrs)");

                System.out.println("\n");

                String choose1 = "";
                String choose2 = "";
                String choose3 = "";
                String selected = "";
                int option = 0;
                {
                    System.out.print("Please select an option: ");
                    option = input.nextInt();
                    if (option == 1) {
                        choose1 = "Child";
                        selected = choose1;
                    } else if (option == 2) {
                        choose2 = "Adult";
                        selected = choose2;
                    } else if (option == 3) {
                        choose3 = "Senior";
                        selected = choose3;
                    }
                }
                // done

                System.out.println("\n");


                int price = 0;
                int tickets = 0;
                System.out.print("Enter the number of tickets: ");
                tickets = input.nextInt();
                if (selected == choose1) {
                    price = 10;
                } else if (selected == choose2) {
                    price = 20;
                } else if (selected == choose3) {
                    price = 15;
                }


                System.out.println("\n");

                System.out.print("You are purchasing " + tickets + " " + selected + " tickets at " + "$" + price + " each!");

                System.out.println("\n");

                int confirm = 0;
                    System.out.print("Press 1 to confirm purchase: ");
                    confirm = input.nextInt();
                    if (confirm != 1) {
                        System.out.print("Incorrect Key. Please return to Main Menu");
                        System.out.println("\n");

                    } else {
                        break;
                    }


                System.out.println("\n");

                int total = tickets;
                price = total * price;
                System.out.print("Total amount for " + selected + " tickets: " + "$" + price);

                System.out.println("\n");

                String pick = "";
                System.out.print("Do you wish to continue: ");
                input.next();

                System.out.println("\n");
                if (pick == "no") {
                    System.out.print("Total amount payable is: " + "$" + price);
                    System.out.println("\n");
                    System.out.print("Have a nice day!");
                    System.out.println("\n");
                }}}

Попытка сделать это в конце программы, когда пользователю предлагается «Продолжить ли», используя метод или что-то еще, но не могу заставить его работать. Либо программа возвращается только в главное меню, либо программа завершается и отображает общее сообщение «Общая сумма к уплате ...» и т. Д. c. Я пытался использовать время с продолжением и разрывом. Использование логического с true и false. Но не повезло. Спасибо всем, кто сможет прояснить это для меня, пожалуйста.

1 Ответ

0 голосов
/ 24 апреля 2020

Во-первых, вы должны назначить пользовательский ввод переменной: pick = input.next(). После этого проблема заключается в том, что вы сравниваете входную строку пользователя со строкой «нет» с помощью оператора ==. При сравнении ссылочных типов (объектов) (а String - объект) в большинстве случаев оператор == дает непредсказуемый результат, поскольку сравнивает ссылку (адрес объекта в памяти), а не фактическое содержимое. Пожалуйста, помните, что вы всегда должны использовать метод .equals(). Вы также должны отказаться от вашего l oop, когда пользователь вводит «нет».

Существует множество материалов по этой проблеме. Вы можете проверить, например, этот Как мне сравнить строки в Java?

PS Я быстро просмотрел остальную часть вашего кода и добавил несколько дополнительных комментариев, которые могут помочь Вы, чтобы улучшить это. Удачи в обучении Java!

    Scanner input = new Scanner(System.in);
    // boolean start = true; you don't need this line
    while(true) { // 'true' condition makes it an infinite loop until you use break
                  // You also have to surround your while loop with curly braces, 
                  // otherwise you fall into an infinite loop
        System.out.printf("%70s %n", " @@@@@     Zoos Australia     @@@@@ \n");
        System.out.printf("%57s %n", "Main Menu\n");
        System.out.printf("%72s %n", "Zoo has the following ticketing options: \n");
        System.out.printf("%59s %n", "1 = Child (4-5 yrs)");
        System.out.printf("%59s %n", "2 = Adult (18+ yrs)");
        System.out.printf("%60s %n", "3 = Senior (60+ yrs)\n");

        String choose1 = "";
        String choose2 = "";
        String choose3 = "";
        String selected = "";
        int option = 0;
        System.out.print("Please select an option: ");
        option = input.nextInt();
        if (option == 1) {
            choose1 = "Child";
            selected = choose1;
        } else if (option == 2) {
            choose2 = "Adult";
            selected = choose2;
        } else if (option == 3) {
            choose3 = "Senior";
            selected = choose3;
        }
        System.out.println(); // "\n" is a redundant argument

        int price = 0;
        int tickets = 0;
        System.out.print("Enter the number of tickets: ");
        tickets = input.nextInt();
        if (selected.equals(choose1)) { // you should never compare strings with == operator! Always use .equals() instead
            price = 10;
        } else if (selected.equals(choose2)) {
            price = 20;
        } else if (selected.equals(choose3)) {
            price = 15;
        }
        System.out.println();
        System.out.print("You are purchasing " + tickets + " " + selected + " tickets at " + "$" + price + " each!");
        System.out.println();

        int confirm = 0;
        System.out.print("Press 1 to confirm purchase: ");
        confirm = input.nextInt();
        if (confirm != 1) {
            System.out.print("Incorrect Key. Please return to Main Menu");
            System.out.println("\n");
        } else {
            //break; you cannot use 'break' in the if statement! You have to figure out another way, how to handle an invalid input
        }
        System.out.println();

        int total = tickets;
        price = total * price;
        System.out.print("Total amount for " + selected + " tickets: " + "$" + price);
        System.out.println();

        String pick = "";
        System.out.print("Do you wish to continue: ");
        pick = input.next(); // you have to assign the input to a variable
        System.out.println();

        if (pick.equals("no")) { // You have to ALWAYS use .equals() when comparing Strings or any other reference types! == works correctly only with primitive types
            System.out.print("Total amount payable is: " + "$" + price);
            System.out.println();
            System.out.print("Have a nice day!");
            System.out.println();
            break; // you need to break from the loop in the end
        }
    }
}
...