0

私のプログラムはアイテムの目録です。各アイテムは、10 に達するまでユーザーによって入力され、最後に各アイテムの合計コスト (コスト * 数量) が表示されます。

しかし、特定のアイテムの数量を更新できる必要があります。そこで、どうにかしてユーザーに「どのアイテムを更新しますか?」と尋ねたいと考えています。と「いくら引きますか」ですが、アイテムを特定の数量にリンクする方法がわかりません。その後、更新されたアイテムのリストと更新された総コストを再度表示したいと思います。

として行うことは可能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);            
    }
4

3 に答える 3

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 = ...
    ...
}
于 2013-03-17T03:39:19.773 に答える
0

の要素を更新できるかどうかだけが気になる場合はList、そうできます。たとえば、listが 10 個StockItemあり、すべてstockItemQuantityAvailableが 100 個で、ユーザーが最初のアイテムを 5 個購入したい場合:

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

リストを印刷すると、最初の項目が 95 個、残りが 100 個あることがわかります。

于 2013-03-17T03:48:14.870 に答える
0

HashMap を使用すると、検索がより効率的になります。

HashMap を使用したくない場合は、StockItem クラスと ShoppingCart クラスに別のクラスを用意することでこれにアプローチできます。ShoppingCart では、次のようなユーティリティ メソッドを記述できます。または、Comparator を実装して 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);
            }
        }
    }
于 2013-03-17T03:55:51.037 に答える