销售点 - 坚持阵列

时间:2014-02-27 03:28:33

标签: java arrays object

基本上我有多个类,我正在尝试为客户购买的每个项目获取一个LineItem数组。 LineItem包括UPC,描述,价格,数量,小计和折扣,它们都存储在单独的类中。我试图得到它,当你使用方法addItemToSaleList它将添加到数组。我需要使用数组而不是数组列表,所以我必须将数组复制到临时数组,然后重新创建一个新数组,添加数组可以存储的数字,然后重新复制它。我不知道要生成数组了。以下是我的代码

public class Product {
private double price;
private String description;
private String ProductCode;
private DiscountStrategy discoutStrategy;

public Product(double price, String description, String ProductCode, DiscountStrategy discoutStrategy) {
    this.price = price;
    this.description = description;
    this.ProductCode = ProductCode;
    this.discoutStrategy = discoutStrategy;
}

public double getPrice() {
    return price;
}

public void setPrice(double price) {
    this.price = price;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getProductCode() {
    return ProductCode;
}

public void setProductCode(String ProductCode) {
    this.ProductCode = ProductCode;
}

public DiscountStrategy getDiscountStrategy() {
    return discoutStrategy;
}

public void setDiscoutStrategy(DiscountStrategy discoutStrategy) {
    this.discoutStrategy = discoutStrategy;
}
}


public class LineItem {
private Product product;
private double quantity;

public LineItem(Product product, double quantity) {
    this.product = product;
    this.quantity = quantity;
}

//Calculates the Discount Amount whether or not it's a percentage or dollar
//off
public double getDiscountAmount () {
    return product.getDiscountStrategy().getDiscount(product.getPrice(), quantity);
}

//Calculates the Subtotal, gets the quantity from the DiscountStrategy and then
//the price from the product
public double getSubTotal() {
    return quantity * product.getPrice();
}

public Product getProduct() {
    return product;
}

public void setProduct(Product product) {
    this.product = product;
}

 public double getQuantity() {
    return quantity;
}

public void setQuantity(double quantity) {
    this.quantity = quantity;
}



public class Receipt {
private LineItem[] lineItem = new LineItem[0];

public Receipt(LineItem[] lineItem) {
    this.lineItem = lineItem;
}


public void addProductToTotalSale(LineItem li) {
    addItemToSaleList();
}

public void addItemToSaleList() {
   LineItem[] tempItemList = new LineItem[lineItem.length + 1];

   for (int i = 0; i < tempItemList.length; i++) {
       tempItemList[i] = lineItem[i];
   }

   lineItem = new LineItem[tempItemList.length];

   for (int j = 0; j < lineItem.length; j++) {
       lineItem[j] = tempItemList[j];
   }
}

public LineItem[] getLineItem() {
    return lineItem;
}

2 个答案:

答案 0 :(得分:1)

我会移除addItemToSaleList()并实施addProductToTotalSale(LineItem),如此

public void addProductToTotalSale(LineItem li) {
  // Allocate the memory.
  LineItem[] tempLineItem = new LineItem[1 + lineItem.length];
  // Copy the array.
  if (lineItem.length > 0) {
    System.arraycopy(lineItem, 0, tempLineItem, 0, lineItem.length);
  }
  // add the new item to the new slot.
  tempLineItem[lineItem.length] = li;
  // update the internal array reference.
  lineItem = tempLineItem;
}

接下来,您应该保护构造函数免受null;

的影响
public Receipt(LineItem[] lineItem) {
  // Try and protect from bad calls, removes need to check for nulls in
  // add (addProductToTotalSale) routine.
  if (lineItem != null) {
    this.lineItem = lineItem;
  }
}

因为您提供了一个默认的0大小的数组,所以您的代码似乎可以安全地继续包含默认构造函数。但是,您可以考虑使Receipt类不可变。

答案 1 :(得分:0)

我不确定你为什么要制作两个新阵列。你只需要一个......

public void addProductToTotalSale(LineItem li) {
    addItemToSaleList();
    lineItem[lineItem.length-1] = li;
}

public void addItemToSaleList() {
   LineItem[] tempItemList = new LineItem[lineItem.length + 1];

   for (int i = 0; i < tempItemList.length; i++) {
     tempItemList[i] = lineItem[i];
   }
   lineItem = tempItemList;
}