每次将新对象添加到 arraylist 时减少整数

Posted

技术标签:

【中文标题】每次将新对象添加到 arraylist 时减少整数【英文标题】:Reduse integer everytime an new object is added to arraylist 【发布时间】:2017-02-16 12:48:54 【问题描述】:

我有一个 Person 类,它有一个 Groceries 类的 ArrayList。 让我们将 Arraylist 命名为 shoppingBag

Student 和 Groceries 各有一个字段,int moneyint price。 具体金额和价格在初始化新对象时由你决定。

因此,每次一个人在他的购物袋中添加一个杂货对象时,他所拥有的金额需要随着添加到购物袋中的杂货总价格而减少。

你是怎么做到的?

【问题讨论】:

你是怎么做到的?你是怎么做到的?向我们展示您的代码.. 【参考方案1】:

所以,让我试着了解你想要什么(就像我为我的客户做的一样)

您有一个带有价格字段的杂货类:

class Groceries 
    private int price;

    public Groceries(int price) 
        this.price = price;
    

    public int getPrice() 
        return price;
    

    @Override
    public String toString() 
        return "Groceries" +
                "price=" + price +
                '';
    

以及将 int money 归档和购物袋字段作为杂货清单的班级人员:

class Person 

    private List<Groceries> shoppingBag = new ArrayList<>();
    private int money;

    public Person(int money) 
        this.money = money;
    

    public List<Groceries> getShoppingBag() 
        return shoppingBag;
    

    public int getMoney() 
        return money;
    

首先你用一些钱创建一个Person的实例:Person person = new Person(150);

然后每次你在购物袋中添加杂货时,比如person.getShoppingBag().add(new Groceries(10));,你确实想减少来自person实例的钱。

所以,如果我是正确的,你需要实现几件事:

1)您应该禁止使用前面描述的方式将杂货添加到购物袋中。当有人试图通过 getter 向 List 添加元素时,我们需要抛出异常。它可以使用列表的不可修改副本来实现:

public List<Groceries> getShoppingBag() 
    List<Groceries> bag = new UnmodifiableArrayList<>(shoppingBag.toArray(new Groceries[shoppingBag.size()]), shoppingBag.size());
    return bag;

或者稍微好一点地使用番石榴:

public List<Groceries> getShoppingBag() 
    List<Groceries> bag = ImmutableList.copyOf(shoppingBag);
    return bag;

2) 添加一个直接添加杂货的方法。如果没有足够的钱没有负余额,你也可以抛出异常:

public void addToShoppingBag(Groceries groceries) 

    if (0 > money - groceries.getPrice()) 
        throw new IllegalStateException("You have not enough money!");
    

    shoppingBag.add(groceries);
    money -= groceries.getPrice();

3) 可能你需要有可能添加一些钱:

private void addMoney(int amout) 
    money += amout;

请查看完整的演示示例:

class Demo 

    public static void main(String[] args) throws IOException 

        Person person = new Person(42);
        try 
            System.out.println(person.getMoney());
            person.addToShoppingBag(new Groceries(12));
            person.addToShoppingBag(new Groceries(20));
            person.addToShoppingBag(new Groceries(5));
            System.out.println(person.getMoney());
            System.out.println(person.getShoppingBag());
            person.getShoppingBag().add(new Groceries(1));
         catch (UnsupportedOperationException e) 
            e.printStackTrace();
        

        try 
            person.addToShoppingBag(new Groceries(66));
         catch (IllegalStateException e) 
            e.printStackTrace();
        
    



class Person 

    private List<Groceries> shoppingBag = new ArrayList<>();
    private int money;

    public Person(int money) 
        this.money = money;
    

    public List<Groceries> getShoppingBag() 
        List<Groceries> bag = ImmutableList.copyOf(shoppingBag);
        return bag;
    

    public void addToShoppingBag(Groceries groceries) 

        if (0 > money - groceries.getPrice()) 
            throw new IllegalStateException("You have not enough money!");
        

        shoppingBag.add(groceries);
        money -= groceries.getPrice();
    

    private void addMoney(int amout) 
        money += amout;
    

    public int getMoney() 
        return money;
    


class Groceries 
    private int price;

    public Groceries(int price) 
        this.price = price;
    

    public int getPrice() 
        return price;
    

    @Override
    public String toString() 
        return "Groceries" +
                "price=" + price +
                '';
    

PS:下次请描述一些代码示例和演示以获得答案:)

【讨论】:

以上是关于每次将新对象添加到 arraylist 时减少整数的主要内容,如果未能解决你的问题,请参考以下文章

每次当前选项卡在 TabBar 颤动中更改时,如何将新页面添加到导航器堆栈?

使用单击 Spinner 项刷新 ArrayList 以将新数据显示到 RecyclerView

使用 jinja2 时如何将新条目添加到字典对象中?

为啥使用 MongoDB 的 $push 将新对象添加到数组时添加了带有 ObjectID 的 _id?

将新键添加到对象时如何重新渲染 v-for

如何把数值或者对象添加到ArrayList集合