2013-03-17 202 views
0

我的程序是一个项目清单。每个项目由用户输入,直至达到10,然后每个项目的总成本(成本*数量)显示在最后。更新ArrayList中的值

但我需要能够更新特定项目的数量。所以我想以某种方式询问用户“你想更新哪个项目?”和“你想要减去多少”,但我不知道如何将项目与其具体数量联系起来。之后,我想再次显示更新的项目列表和更新的总成本。

是否可以做为ArrayList?或者我应该使用不同的结构?

所以这里的类:

public class StockItem { 
String stockItemID; 
String stockItemDescription; 
double stockItemCostPrice; 
double stockItemSellingPrice; 
int stockItemQuantityAvailable; 
String toString; 
int updateItemQuantityAvailable; 

StockItem(String stockItemID, String stockItemDescription, double stockItemCostPrice, 
double stockItemSellingPrice, int stockItemQuantityAvailable, int 
updateItemQuantityAvailable) { 
    this.stockItemID = stockItemID; 
    this.stockItemDescription = stockItemDescription; 
    this.stockItemCostPrice = stockItemCostPrice; 
    this.stockItemSellingPrice = stockItemSellingPrice; 
    this.stockItemQuantityAvailable = stockItemQuantityAvailable; 
    this.updateItemQuantityAvailable = updateItemQuantityAvailable; 
} 

public void setStockItemID(String stockItemID) { 
    this.stockItemID = stockItemID; 
} 

public String getStockItemID() { 
    return stockItemID; 
} 

public void setStockItemDescription(String stockItemDescription) { 
    this.stockItemDescription = stockItemDescription; 
} 

public String getStockItemDescription() { 
    return stockItemDescription; 
} 

public void setStockItemCostPrice(double stockItemCostPrice) { 
    this.stockItemCostPrice = stockItemCostPrice; 
} 

public double getStockItemCostPrice() { 
    return stockItemCostPrice; 
} 

public void setStockItemSellingPrice(double stockItemSellingPrice) { 
    this.stockItemSellingPrice = stockItemSellingPrice; 
} 

public double getStockItemSellingPrice() { 
    return stockItemSellingPrice; 
} 

public void setStockItemQuantityAvailable(int stockItemQuantityAvailable) { 
    this.stockItemQuantityAvailable = stockItemQuantityAvailable; 
} 

public int getStockItemQuantityAvailable() { 
    return stockItemQuantityAvailable; 
} 

public String toString() { 
    return (stockItemID + "\t" + stockItemDescription + "\t" + " Cost Price: $" + stockItemCostPrice + "\t" + "Selling Price: $" + stockItemSellingPrice + "\t" + "Quantity: " + stockItemQuantityAvailable + "\n"); 
} 

public void setUpdateItemQuantityAvailable(int updateItemQuantityAvailable){ 
    this.updateItemQuantityAvailable = updateItemQuantityAvailable; 
} 
public int getUpdateItemQuantityAvailable() { 
    return updateItemQuantityAvailable; 
} 

,然后方法:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    ArrayList<StockItem> list = new ArrayList<StockItem>(); 
    for (int i = 0; i < 2; i++) { 

     System.out.print(" Enter ID: "); 
     String stockItemID = input.next(); 

     System.out.print(" Enter Item Description: "); 
     String stockItemDescription = input.next(); 

     System.out.print(" Enter Item Cost Price: "); 
     double stockItemCostPrice = input.nextDouble(); 

     System.out.print(" Enter Item Selling Price: "); 
     double stockItemSellingPrice = input.nextDouble(); 

     System.out.print(" Enter Item Quantity Available: "); 
     int stockItemQuantityAvailable = input.nextInt(); 

     int updateItemQuantityAvailable = (0); 

     list.add(new StockItem(stockItemID, stockItemDescription, stockItemCostPrice, stockItemSellingPrice, stockItemQuantityAvailable, updateItemQuantityAvailable)); 
     list. 
    } 

    System.out.println(list.toString().replace("]", "").replace("[", "").replace(",", "").replace(" ","")); 

    for (StockItem data : list) { 
     double totalStockCost = (data.getStockItemQuantityAvailable()- data.getUpdateItemQuantityAvailable()) * (data.getStockItemCostPrice()); 
     System.out.println(("Total Cost for ") + data.getStockItemDescription() + ": $" + totalStockCost);    
    } 
+1

为了更好地帮助您,请发布[SSCCE](http://sscce.org/)。 – 2013-03-17 03:43:50

回答

0

如果您只是在担心能够更新List的元素,那么您可以ñ那样做。例如,如果您填写list 10个StockItem S,所有的100 stockItemQuantityAvailable,而用户想要买5的第一个项目:

StockItem chosen = list.get(0); 
int currentStock = chosen.getStockItemQuantityAvailable(); 
chosen.setStockItemQuantityAvailable(currentStock - 5); 

现在如果你打印出清单,你会发现第一件物品有95件,其余100件。

0

你应该使用HashMap而非ArrayList。如果“更新”你的意思是更换,那么这应该工作:

HashMap<String, StockItem> map = new HashMap<String, StockItem>(); 
for (int i = 0; i < 2; i++) { 

    System.out.print(" Enter ID: "); 
    String stockItemID = input.next(); 
    ... 

    StockItem item = new StockItem(stockItemID, stockItemDescription, stockItemCostPrice, stockItemSellingPrice, stockItemQuantityAvailable, updateItemQuantityAvailable); 
    map.put(stockItemID, item); // this line will replace any earlier item with same stockItemID 
} 

来显示地图的内容:

for(StockItem item : map.values()) { 
    System.out.println(item); 
} 

显示每个项目的总成本:

for(StockItem data : map.values()) { 
    double totalStockCost = ... 
    ... 
} 
+0

请记住,只有在StockItem实现'equals()'和'hashCode()'来查看stockItemId时,它才会起作用。 – Blake 2013-03-17 04:41:58

0

HashMap将使搜索更有效率。

如果你不想使用HashMap,那么我会采取的办法是为StockItem和ShoppingCart类创建一个单独的类。在ShoppingCart中,您可以编写如下所示的有用方法。或者,您也可以实现比较器并使用List.contains()。

ShoppingCart 
    private List<StockItem> items = new ArrayList<StockItem>(); 

    public void updateQuantity(String itemId, int qty) { 
     if(null == itemId) { return; } 

     for(StockItem item : items) { 
      if (itemId.equals(item.getStockItemID())){ 
       item.setStockItemQuantityAvailable(qty); 
      } 
     } 
    }