如何将字段设置为与另一个类中的另一个字段相等

时间:2016-11-22 22:18:55

标签: java pointers

我有以下内容: 第1类:

public class SellProduct
{
    private int productCost;
    public SellProduct(int productCost)
    {
     this.productCost = productCost;   
    }

    public int getProductCost()
    {
        return productCost;
    }
}

此课程将设定产品成本。 第2课:

public class SalesOfTheYear
{
    private int totalIncome;
    SellProduct sellProduct;

    public SalesOfTheYear()
    {
     totalIncome = 0;
    }

    public void cashOut()
    {
       totalIncome = sellProduct.getProductCost() + totalIncome;
    }

    public int getSalesOfTheYear()
    {
         return totalIncome;
    }
}

现在我想要的是第二阶段,以获取产品成本,然后将其设置为totalIncome字段。当然,要同时保持它的价值,而不是用新的totalIncome值替换它。 但是,每次我运行cashout时它都会发送一个java.lang.NullPointerException。这是否意味着我必须创建类sellPoduct的对象? 如果我必须为它提供一个参数,这意味着无论我用参数提供什么,所以它总是productCost?

3 个答案:

答案 0 :(得分:0)

是的,将产品费用传递给cashOut()方法并将其添加到totalIncome而不是存储SellProduct本身的引用是有意义的。它看起来像这样:

public void cashOut(int cost){
    totalIncome += cost;
}

另外,我们不需要SalesOfTheYear类中的默认构造函数,因为int文字在创建对象时被赋予默认值(在本例中为0)。

答案 1 :(得分:0)

是的,在Java中,只要你有自己的类,如SellProduct,你就必须用它来初始化它:

SellProduct sellProduct = new SellProduct(xxx);

xxx在你的情况下是一个整数

如果你给它20号,那么每次你运行cashOut()

时你的totalIncome将增加20

答案 2 :(得分:0)

要更新totalIncome实例中的SalesOfTheYear字段,您需要将所有必需的SellProduct实例传输到SalesOfTheYear。 或者,您拥有所有实例,并且您可以一次性提供它们,要么您可以逐个实例提供。

 public class SalesOfTheYear
    {
    private int totalIncome;
    SellProduct sellProduct;
    public SalesOfTheYear()
    {
     totalIncome = 0;
    }

     public void cashOut(SellProduct sellProduct)
    {
       totalIncome = sellProduct.getProductCost() + totalIncome;
    }

    public void cashOut(List<SellProduct> sellProducts)
    {
       for (SellProduct product : sellProducts){
          cashOut(product);
        }
    }

    public int getSalesOfTheYear()
    {
       return totalIncome;
    }
  }

使用方法:

SalesOfTheYear salesOfTheYear = new SalesOfTheYear();
salesOfTheYear.cashOut(new SellProduct(500));
salesOfTheYear.cashOut(new SellProduct(100));
int totalSale = salesOfTheYear.getSalesOfTheYear();