Добавление элемента в arraylist пользователем


Я хочу, чтобы пользователь добавил элемент в существующий arraylist и ввел некоторые переменные, связанные с элементом arraylist, arraylist:

Поэтому я написал следующий код:

           ArrayList<FruitShop> shops= new ArrayList<FruitShop>();
           Scanner in= new Scanner(System.in);

            FruitShop newShop = new FruitShop(null,0.0, new Apples(), new OwnerInfo());
            shops.add(newShop);
            System.out.println("What is the name of new shop?: ");
            newShop.setShopName(int.next());;
            System.out.println("Enter initial balance in USD: ");
            newShop.setBalance(Double.parseDouble(in.next()));
            System.out.println("Enter owner name: ");
            newShop.getShopOwner().setName(in.next());
            System.out.println("Enter owner age: ");
            newShop.getShopOwner().setAge(Integer.parseInt(in.next()));
            System.out.println("How many apples does the store have?: ");
            newShop.getApplesInfo().setQuantity(Integer.parseInt(in.next()));
            System.out.println("What is the price of each apple?:");
            newShop.getApplesInfo().setPrice(Double.parseDouble(in.next()));
            System.out.println("Your shop has been added! ");

           FruitShop.ID= ID;
            ID++;

Дело в том, что это выбор из меню "Добавить новый фруктовый магазин", поэтому каждый раз, когда пользователь добавит фруктовый магазин, объект будет называться newShop, а затем старый newShop будет удален! как избежать этой ошибки? p. s: фруктовый магазин состоит из других классов: Яблоки и OwnerInfo Заранее спасибо.

2 2

2 ответа:

Вы должны вставить строку shops.add(newShop); после того, как все изменения newShop сделаны. И, конечно, сделайте ArrayList<FruitShop> shops в качестве переменной экземпляра. Не создавайте новый список после каждого вызова метода.

public class A {
    private List<FruitShop> shops= new ArrayList<FruitShop>();

    public void addShop() {
        ...
        shops.add(newShop);
    }
}
 ArrayList<FruitShop> shops= new ArrayList<FruitShop>();
           Scanner in= new Scanner(System.in);

            FruitShop newShop = new FruitShop(null,0.0, new Apples(), new OwnerInfo());

            System.out.println("What is the name of new shop?: ");
            newShop.setShopName(int.next());;
            System.out.println("Enter initial balance in USD: ");
            newShop.setBalance(Double.parseDouble(in.next()));
            System.out.println("Enter owner name: ");
            newShop.getShopOwner().setName(in.next());
            System.out.println("Enter owner age: ");
            newShop.getShopOwner().setAge(Integer.parseInt(in.next()));
            System.out.println("How many apples does the store have?: ");
            newShop.getApplesInfo().setQuantity(Integer.parseInt(in.next()));
            System.out.println("What is the price of each apple?:");
            newShop.getApplesInfo().setPrice(Double.parseDouble(in.next()));
            System.out.println("Your shop has been added! ");
             shops.add(newShop); // add last of the line when all initialization is done.

Наконец-то сдвиньте свое утверждение shops.add(newShop);. После инициализации это делается.