每次将新对象添加到 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 money
和 int 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