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

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

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

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

你是怎么做到的?

【问题讨论】:

  • 你是怎么做到的?你是怎么做到的?向我们展示您的代码..

标签: java arraylist add subtraction


【解决方案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:下次请描述一些代码示例和演示以获得答案:)

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多