Как предоставить список товаров в интернет-магазине через свитч? Как использовать выход в главное меню? (или другой способ) - PullRequest
0 голосов
/ 05 января 2019

Java. Есть интернет-магазин, классы товаров, конструкторы и т. Д. (У меня есть все, что мне нужно). Также есть множество товаров. Оператор switch предоставляет возможность выбора, пользователю необходимо выбрать номер продукта на консоли. Я хочу, чтобы пользователь мог выбирать несколько продуктов (не только один), поэтому я добавил сканеры (надеюсь, в сканере нет ничего плохого) У меня есть метод, который направляет пользователя в главное меню, который в этом коде называется firstMethod (); Проблема с переходом в главное меню через оператор switch. Когда я нажимаю 1, 3 и так далее - продукты отображаются, но когда я нажимаю 6, firstMethod (метод, который вызывает главное меню в этом интернет-магазине) действительно работает, но не «вовремя». Когда я нажимаю 1, выполняется регистр 1, программа ожидает ввода следующего числа. Я нажимаю 6 (чтобы перейти в главное меню), и по какой-то причине программа отображает случай 2. Затем я нажимаю 6, и консоль отображает случай 3 и так далее. Еще два раза, и консоль отображает главное меню, это действительно то, что я хочу показать прямо в тот момент, когда я нажимаю номер 6. Скажите пожалуйста - что с этим не так? Как перейти в главное меню (вызвать метод) с этим оператором, или лучше использовать другой? Напишите это пожалуйста.

Итак, я хочу, чтобы первый метод работал, когда пользователь нажимает 6 число. Могу ли я сделать это через коммутатор или мне нужен другой оператор? Пожалуйста, помогите, я буду очень благодарен.

public static void switch1() {


    Product[] products = {
            new Fridge(),
            new Fridge(),
            new Fridge(),

... ... ...

    };

    Scanner scan = new Scanner(System.in);
    System.out.println("1 - " + products[0]);
    System.out.println("2 - " + products[1]);
    System.out.println("3 - " + products[2]);
    System.out.println("4 - " + products[3]);
    System.out.println("5 - " + products[4]);
    System.out.println("6 - Go to main menu");
    System.out.println("Which one do u want to buy?");

int i = Scanner.nextInt ();

            switch (i) {

                case 1:

                    System.out.println(products[0]);

                   Scanner.nextInt();

                case 2:

                    System.out.println(products[1]);
                   Scanner.nextInt();

                case 3:
                    System.out.println(products[2]);
                   Scanner.nextInt();

                case 4:

                    System.out.println(products[3]);
                  Scanner.nextInt();
                case 5:
                    System.out.println(products[4]);
                  Scanner.nextInt();
                case 6:
                        firstMethod();
            }

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Это может быть сделано гораздо более эффективным способом без выключателя вообще.

Scanner scan = new Scanner(System.in);

for (int i = 0; i < products.length; i++) {
    System.out.println((i + 1) + " - " + products[i]);
}
System.out.println((products.length + 1) + " - Go to main menu");
System.out.println("Which one do u want to buy?");

while (true) {
    int selection = Scanner.nextInt();
    if (selection > 0 && selection <= products.length) {
        System.out.println(products[selection - 1]);
    } else {
        break;
    }
}
firstMethod();
0 голосов
/ 05 января 2019

Кажется, что единственная видимая проблема заключается в том, что в конце каждого из ваших case блоков нет операторов break;.

Например:

switch (i) {
    case 1:
        System.out.println(products[0]);
        Scanner.nextInt();
        break;
    ...

Кроме того, простой вызов Scanner.nextInt(); ничего не сделает, если вы не используете значение, возвращаемое вызовом.

Вы также сказали, что хотите, чтобы пользователь мог выбирать несколько продуктов, поэтому для этого вы можете поместить switch в цикл, такой как цикл while, и держать его в цикле, пока условие выполнено, чтобы остановить его.

Редактировать: Следующий код показывает небольшой пример того, какой может быть ваша структура кода:

boolean loop = true;
while (loop) {
    int i = scan.nextInt();
    switch (i) {
        case 1:
            System.out.println(product[0]);
            break;
        //... cases 2-5 are similar to case 1
        case 6:
            firstMethod();
            loop = false;
            break;
    }
}
...