每次将新对象添加到arraylist时重用整数

时间:2016-10-07 13:36:24

标签: java arraylist add subtraction

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

学生和杂货各有一个字段,int moneyint price。 初始化新对象时,具体的金额和价格由您决定。

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

你是怎么做到的?

1 个答案:

答案 0 :(得分:1)

所以,让我尝试理解你想要的东西(就像我对我的客户一样)

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

@RunWith(Arquillian.class)
@DataSource("java:/analyticsTestDS")
@UsingDataSet("datasets/account/account-registration-activate.xml")
public class AccountRegistrationActivateServiceImplTest extends PostgresDBTestCase {


    @Deployment
    public static Archive<?> createTestArchive() {

        PomEquippedResolveStage pom = Maven.resolver().loadPomFromFile("pom.xml");
        File[] commonsLang = pom.resolve(
                "org.jadira.usertype:usertype.core",
                "org.hibernate:hibernate-validator",
                "edu.vt.middleware:vt-password",
                 "monetdb:monetdb-jdbc",
                "joda-time:joda-time"
        ).withTransitivity().asFile();

        WebArchive war = ShrinkWrap.create(WebArchive.class, "test.war")
                .addPackages(true, "com.atomsail.analytics.accounts")
                .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml")
                .addAsWebInfResource("ejb/account/account-registration-services-jboss-ejb3.xml", "jboss-ejb3.xml")
                .addAsWebInfResource("test-web.xml", "web.xml")
                .addAsResource("truncate_all_app.sql")
                .addAsLibraries(commonsLang);

        System.out.println(war.toString(true));


        return war;
    }




@Test
@InSequence(1)
public void activationTest()  {



}

并且以货币提交和购物袋领域的班级人员作为杂货清单:

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 +
                '}';
    }
}

首先,您创建一个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);,您确实希望减少人员实例的金额。

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

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

person.getShoppingBag().add(new Groceries(10));

或者稍微好一点,很快就会使用Guava:

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

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

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

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

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;
}

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