#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. О, это сработало! Большое вам спасибо, у меня было много проблем, пытаясь разобраться в этом!