2

我有一个 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()
{…}
}




}
4

5 回答 5

1

StockItem需要有setter方法来设置价格 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;
        }
     }
  }
于 2013-04-30T16:00:59.877 回答
1
ListIterator itr = stock.listIterator();
while(itr.hasNext())
 {
            StockItem item = (StockItem)itr.next();
    if(item.getitemID() == itemID)
    {
                    item.setPrice(price);
        break;
    }
    }

不过,使用 anHashMap<String, StockItem>()存储库存对象的 id 并更新价格可能对您来说更容易。

而且您应该将 id 存储为Long而不是String,所以这将是HashMap<Long, StockItem>()

于 2013-04-30T15:56:51.063 回答
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);
}
于 2013-04-30T15:57:17.240 回答
0

@hvgotcodes除了有一个非常基本的错误之外,每个人的答案都在这里:

if(item.getitemID() == itemID) // this won't work!

@hvgotcodes解决方案是实现您的课程的正确方法。使用 aHashMap比迭代LinkedList删除东西要好得多。

于 2013-04-30T16:16:26.953 回答
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;
    }
    }
}
于 2013-04-30T16:02:18.440 回答