我有以下内容: 第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?
答案 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();