Как выйти java метод - PullRequest
       4

Как выйти java метод

0 голосов
/ 10 февраля 2020

Извините за плохой заголовок, я не знаю лучшего перефразирования ..

Ооо, я сейчас пишу программу Grocery List и застрял в своем методе addItemsToList. По сути, я хочу, чтобы у него были точки выхода. Один из которых вернет вас в главное меню приложения, а другой вернет вас в контекстное меню этого метода addItemsToList. К сожалению, я полностью застрял.

Вот мой код для метода:

 private static void addItemsToList(){
        System.out.println("To which category do you want to add? ");
        categoryInstructions();
        int choice2 = scan.nextInt();

        if(choice2 == 5){ // i am "getting out" here just fine
            interact(); // this is the method that instructs everything to happen in the main method
        }else {
            System.out.println("What do you want to add? Type 'exit' for menu");
                i = scan.next(); // this is where the second "exit" point is supposed to be if someone types "exit"

                if (i.compareTo(exit) != 0) {                                         
                        System.out.println("Please enter the quantity ");
                        int quant = scan.nextInt();

                        if (choice2 == 1) {
                            GrocerieList.foodstuffsList.add(i);
                            GrocerieList.foodstuffsAmount.add(quant);
                        } else if (choice2 == 2) {
                            GrocerieList.hygeneList.add(i);
                            GrocerieList.hygeneAmount.add(quant);
                        } else if (choice2 == 3) {
                            GrocerieList.drinkList.add(i);
                            GrocerieList.drinkAmount.add(quant);
                        } else if (choice2 == 4) {
                            GrocerieList.otherList.add(i);
                            GrocerieList.otherAmount.add(quant);
                        }
                    } else {
                        addItemsToList();
                }
        }
    }

Просто для лучшего понимания вот категорияInstructions ():

public static void categoryInstructions(){
        System.out.println("Press");
        System.out.println(" ");
        System.out.println("\t\t" + "(1)" + "\t--\t" + "for foodstuffs");
        System.out.println("\t\t" + "(2)" + "\t--\t" + "for hygene");
        System.out.println("\t\t" + "(3)" + "\t--\t" + "for drinks");
        System.out.println("\t\t" + "(4)" + "\t--\t" + "for others");
        System.out.println(" ");
        System.out.println("\t\t" + "(5)" + "\t--\t" + "to get back main menu");
    }

Сейчас происходит то, что я могу отлично выйти из addItemsToList, если choice2 == 5, но я не могу найти логическое решение для выхода, если я равен «выход». Я заставил его работать быстро и грязно с приложением, сначала запрашивая количество, а затем выходя, но это не совсем то, что я хочу.

Поскольку я (очевидно) начинающий, любые другие комментарии о моем стиле или еще будет с благодарностью !!

1 Ответ

0 голосов
/ 11 февраля 2020

Для этой цели можно использовать регистр переключателя, флаг, чтобы узнать, когда следует выполнить элегантный выход, и некоторое время l oop, чтобы помочь вам оставаться в меню, пока пользователь не введет правильный ввод.

Например:

public class Controller {

    private GroceriesController groceriesController;
    private boolean isRunning; // our flag that will help us to quit the menu

    public Controller(GroceriesController groceriesController) {
        this.groceriesController = groceriesController;
    }

    public void run() {
        isRunning = true;
        while (isRunning) {
            clearScreen();
            displayLogo();
            displayMainMenu();
            handleMainMenu(); // method that will do all the job;
        }
    }

    private void handleMainMenu() {
        int userChoice = scanner.nextInt();
        switch (userChoice) {
            case 1:
                groceriesController.handleGroceriesMenu();
                break;
            case 2:
                returnItems();
                break;
            case 0:
                isRunning = false; // exit from the menu
                break;
            default:
                System.out.println("Invalid input");
                break;
        }

    }

    private void displayMainMenu() {
        System.out.println("\n Grocery store:\n"
                + "[1] Buy stuff\n"
                + "[2] Return stuff\n"
                + "[0] Leave store");
    }
}

public class GroceriesController {

    private boolean isRunning; // same strategy as before

    public void handleGroceriesMenu() {
        isRunning = true;
        while (isRunning) {
            clearScreen();
            displayLogo();
            displayMenu();
            handleMenu();
        }
    }

    private void handleMenu() {
        int userChoice = scanner.nextInt();
        switch (userChoice) {
            case 1:
                addItemToCart(item);
                System.out.println("The item: " + item + "has been added.");
                break;
            case 2:
                removeItemFromCart(item);
                System.out.println("The item: " + item + "has been removed.");
                break;
            case 0:
                isRunning = false; // exit from the menu
                break;
            default:
                System.out.println("Invalid input");
                break;
        }

    }

    private void displayMenu() {
        System.out.println("\n Select:\n"
                + "[1] Buy item\n"
                + "[2] Put back\n"
                + "[0] Leave");
    }

}

Таким образом, вы можете иметь несколько меню, которые вызывают друг друга, и в конце программа завершается сама, без дикого возврата; или System.exit (0);

Редактировать: добавлен еще один класс для лучшего понимания.

...