Как напечатать полный Arraylist, который хранится в HashMap - PullRequest
0 голосов
/ 05 октября 2019

Мне нужна помощь, чтобы выполнить мое задание. Цель состоит в том, чтобы получить корзину покупок, которую использует другой покупатель, и каждый может добавить какую-то статью в свою корзину. Моя идея состоит в том, чтобы создать список всех статей, которые я положил в корзину, и сопоставить созданный список с ключом hashmap, строковым именем покупателя.

К сожалению, если я хочу распечатать статьи для каждого покупателя,Я даже получаю все статьи всех покупателей. Если честно, я довольно новичок в этом и все еще не уверен, что это правильный способ заставить это работать. До того, как я попробовал Hasmap, я хотел иметь динамическое имя моих arraylists, значит, имя arraylist статьи должно быть именем покупателя.

public class Main {

    private static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {        

        int amount;
        String customerName = "";       
        System.out.println("Wieviel Benutzer möchten einkaufen?");
        amount = Integer.parseInt(sc.nextLine());

        for (int i = 0; i < amount; i++) {
            System.out.println("Name eingeben:");
            customerName = sc.nextLine();
            Warenkorb.initialCreation(customerName);}}}         

class Warenkorb {
private static ArrayList<Artikel> shoppingCart = new ArrayList<>();
private static HashMap<String, ArrayList<Artikel>> map = new 
HashMap<String, ArrayList<Artikel>>();
private static Scanner sc = new Scanner(System.in);

public static void initialCreation(String customerName) {
    String currentUser = customerName;
    int amountofitem;
    System.out.println("How many Arcticle do you want to create");
    amountofitem = Integer.parseInt(sc.nextLine());

for (int i = 0; i < amountofitem; i++) {
    String artikelName = "";
    int price, qty;
    System.out.println(">>>Add Article<<<");
    System.out.println("Please enter article name");
    artikelName = sc.nextLine().trim().toString();
    System.out.println("Please enter price");
    price = Integer.parseInt(sc.nextLine());
    System.out.println("Please enter how many you would like to add -> quantity");
    qty = Integer.parseInt(sc.nextLine());
    Artikel bla = new Artikel(artikelName, qty, price);
    shoppingCart.add(bla);
    }
    map.put(currentUser, shoppingCart);

for (Map.Entry<String, ArrayList<Artikel>> entry : map.entrySet()) {
System.out.println("Shopping Cart of  " + entry.getKey());
    for (Artikel item : entry.getValue()) {
    System.out.println("Artikel" + " " + item.getItemName() + " " + item.getItemPrice() + "€ " + item.getItemTax() + "%.");
    }
}
}

Вот что я получу, если попытаюсь распечатать каждую корзину:

Shopping Cart of PEter
Artikel Apfel 3€ 3%.
Artikel Banana 3€ 3%.
Shopping Cart of  Chris
Artikel Apfel 3€ 3%.
Artikel Banana 3€ 3%.

Ответы [ 2 ]

0 голосов
/ 05 октября 2019
public class Main {
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
    int amount;
    String customerName = "";
    System.out.println("Wieviel Benutzer möchten einkaufen?");
    amount = Integer.parseInt(sc.nextLine());

    for (int i = 0; i < amount; i++) {
        System.out.println("Name eingeben:");
        customerName = sc.nextLine();
        new Warenkorb().initialCreation(customerName);
    }
}

}

class Warenkorb {
private ArrayList<String> shoppingCart = new ArrayList<>();
private HashMap<String, ArrayList<String>> map = new HashMap<>();
private Scanner sc = new Scanner(System.in);

public void initialCreation(String customerName) {
   // you code
}

}

Что-то в этом роде.

0 голосов
/ 05 октября 2019

Проблема в том, что ваши shoppingCart и map определены в статическом контексте класса. Каждый раз, когда вы вызываете метод initialCreation, он работает с одними и теми же коллекциями. Я бы посоветовал сделать коллекции нестатичными, а также метод initialCreated.

...