我有一个StockList类,其中包含一个链表,可以使用各种方法控制库存。但是我仍然坚持在我的方法体内放入我的updateItemPrice方法。 我是否需要使用setter来设置新的商品价格,如果是这样我将如何进行呢?
到目前为止,这是我的代码,非常感谢任何帮助!
import java.util.*;
public class StockList {
{
private LinkedList<StockItem> stock
= new LinkedList<StockItem>();
public StockList() {};
// Adds item to end of stock list
public void addItem(StockItem item)
{
this.stock.addLast(item);
}
// Removes item identified by productID from stock list
public void deleteItem(String itemID)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID() == itemID)
{
stock.remove(itr.previousIndex());
break;
}
}
}
// Updates price of existing item
public void updateItemPrice(String itemID, double price)
{
???
}
// Updates quantity of existing item
public void updateItemQuantity(String itemID, int quantity)
{…}
// Updates re-order level of existing item
public void updateReOrderLevel(String itemID,
int reOrderLevel)
{…}
// Returns formatted representation of the stock list
public String formatStockList()
{…}
// Returns formatted representation of re-order list
// Items are on this list if quantity < reOrderLevel
public String formatReOrderList()
{…}
}
}
答案 0 :(得分:1)
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID() == itemID)
{
item.setPrice(price);
break;
}
}
尽管如此,使用HashMap<String, StockItem>()
存储股票对象的ID可能更好一点,更新价格会更容易。
您应该将ID存储为Long
而不是String
,因此这将是HashMap<Long, StockItem>()
答案 1 :(得分:1)
由于您有itemId
,我不会使用列表。我会使用Map,其中itemId
为键,StockItem为值。然后你的添加和删除方法变得更加简单
Map<String, StockItem> stocks = new HashMap<String, StockItem>();
public void addStockItem(StockItem stockItem) {
this.stocks.put(stockItem.getItemId(), stockItem);
}
public void deleteStockItem(StockItem stockItem) {
this.stocks.remove(stockItem.getItemId());
}
然后更新就像从地图中取出相应的项目并更新其价格一样简单。
public void updateStockItem(String id, Double price) {
StockItem item = this.stocks.get(id);
item.setPrice(price);
}
答案 2 :(得分:1)
StockItem
需要使用setter方法将Price设置为setPrice
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID() == itemID)
{
item.setPrice(price);
break;
}
}
您的删除代码中也有问题...
public void deleteItem(String itemID)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID() == itemID)
{
stock.remove(itr.previousIndex());
break;
}
}
}
这会给你concerrent Access exception
。请使用以下代码。
public void deleteItem(String itemID)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID() == itemID)
{
itr.remove(); // Removes last obejct returned by itr.next()
break;
}
}
}
答案 3 :(得分:0)
// Updates price of existing item
public void updateItemPrice(String itemID, double price)
{
ListIterator itr = stock.listIterator();
while(itr.hasNext())
{
StockItem item = (StockItem)itr.next();
if(item.getitemID() == itemID)
{
item.setPrice(price);
break;
}
}
}
答案 4 :(得分:0)
除了@hvgotcodes
之外,每个人的答案都有一个非常基本的错误:
if(item.getitemID() == itemID) // this won't work!
@hvgotcodes
解决方案是实现课程的正确方法。使用HashMap
远比迭代LinkedList
删除内容要好得多。