Оператор Switch не позволяет мне добавить последний элемент ArrayLists в новый ArrayList

#java #arraylist

#java #arraylist

Вопрос:

Для каждого случая в switch инструкции функция отображает подменю, которое позволяет пользователю выбрать, какой элемент он хотел бы, и возвращает ArrayList и добавляет его в allItem ArrayList . Все работает точно так, как должно быть, пока я не добавил строки для добавления элементов в ArrayList totalCost . Вместо того, чтобы возвращаться к первому оператору print, он застревает при выполнении функции, которую только что ввел пользователь, и выполняет это несколько раз, прежде чем вернуться в исходное меню, и больше не добавляет ArrayList элементы корректно. После удаления строк, в которых я указал проблемы, все работает нормально, но мне просто нужно получить последний индекс ArrayList каждой функции, которую я вызывал в каждом switch операторе, и добавить его в totalCost ArrayList .

  public static ArrayList<ArrayList<String>> itemMenu(){
        ArrayList<ArrayList<String>> allItems = new ArrayList<>();
        ArrayList<String> totalCost = new ArrayList<>();
        Scanner in = new Scanner(System.in);
        boolean chosen = false;

        do {
            System.out.println("nWelcome to the store, what would you like to do?");
            System.out.println("1.) Get Boban2.) Get Coffeen3.) Get a Pastryn4.) Get a Macaronn"  
                    "5.) Get a Cookien6.) Done");
            int userChoice = 0;
            userChoice = in.nextInt();

            switch (userChoice) {
                case 1:
                    allItems.add(bobaDrink()); // Adds the returned ArrayList into an ArrayList of all items
                    totalCost.add(bobaDrink().get(bobaDrink().size() - 1)); //Problem
                    break;
                case 2:
                    allItems.add(coffeeDrink());
                    totalCost.add(coffeeDrink().get(coffeeDrink().size() - 1)); //Problem
                    break;

                case 3:
                    allItems.add(pastryItem());
                    totalCost.add(pastryItem().get(pastryItem().size() - 1)); //Problem
                    break;

                case 4:
                    allItems.add(macaronItem());
                    totalCost.add(macaronItem().get(macaronItem().size() - 1)); //Problem
                    break;
                case 5:
                    allItems.add(cookieItem());
                    totalCost.add(cookieItem().get(cookieItem().size() - 1)); //Problem
                    break;

                case 6:
                    chosen = true;
                    break;

                default : System.exit(0);
                    break;
            }


        }
        while(!chosen);

        System.out.println(allItems);
        System.out.println(totalCost);

        return allItems;

    }
  

Если кому-то нужны дополнительные разъяснения по каким-либо другим вопросам, связанным с этим, дайте мне знать!

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

1. не могли бы вы, пожалуйста, поделиться тем, что делает одна из ваших функций, например, bobaDrink? если он просто возвращает непустой ArrayList<String>, он должен работать нормально

Ответ №1:

Да, этот код странный

 allItems.add(bobaDrink()); // Adds the returned ArrayList into an ArrayList of all items
totalCost.add(bobaDrink().get(bobaDrink().size() - 1));
  

поскольку вы вызываете bobaDrink() три раза

Я предлагаю

 ArrayList<String> tmp = bobaDrink();
allItems.add (tmp);
totalCost.add(tmp.get(tmp.size() - 1));
  

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

1. Как это отвечает на вопрос? В чем заключается вопрос?

2. @shmosel Операционная система отправила какой-то метод, который запрашивает у пользователя дополнительные входные данные (застревает при выполнении функции, которую пользователь только что ввел, и выполняет это несколько раз) и он задается вопросом, почему пользователю постоянно запрашивается одна и та же информация при вызове одного и того же метода несколько раз — вот мое прочтение этого

3. @shmosel Если я ошибаюсь, пожалуйста, дайте мне знать, и я удалю

4. Для меня это имеет смысл.

5. О, это сработало! Большое вам спасибо, у меня было много проблем, пытаясь разобраться в этом!