2

リンクリストを含む StockList クラスがあり、さまざまな方法を使用して在庫を制御できます。ただし、 updateItemPrice メソッドのメソッド本体に何を入れるかについては固執しています。新しいアイテムの価格を設定するためにセッターを使用する必要がありますか?

これはこれまでの私のコードです。どんな助けでも大歓迎です!

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

StockItemPrice を次のように設定するには、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 に答える
0

ここでのみんなの答えに@hvgotcodesは、非常に基本的なバグがあることを除いて:

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

@hvgotcodesソリューションは、クラスを実装する正しい方法です。a を使用すると、反復して削除するHashMapよりもはるかに優れています。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 に答える