首页 > 解决方案 > Switch 语句不允许我将 ArrayLists 的最后一个元素添加到新的 ArrayList

问题描述

对于switch语句中的每种情况,该函数显示一个子菜单,允许用户选择他们想要的项目并返回一个ArrayList并将其添加到allItem ArrayList. 在我添加行以将元素添加到ArrayList totalCost. 它没有循环回到第一个打印语句,而是在执行用户刚刚输入的功能时卡住了,并在返回原始菜单之前多次执行,并且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 Boba\n2.) Get Coffee\n3.) Get a Pastry\n4.) Get a Macaron\n" +
                    "5.) Get a Cookie\n6.) 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;

    }

如果有人需要对此进行更多说明,请告诉我!

标签: javaarraylist

解决方案


是的,这段代码很奇怪

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));

推荐阅读