2013-03-17 3 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/). –

ответ

0

Если вы просто обеспокоены возможностью обновления элементов List, то да, вы n сделать это. Например, если вы заполнили с, все с stockItemQuantityAvailable 100, и пользователь хочет купить 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()', чтобы посмотреть на shareItemId. – Blake

0

HashMap сделает поиск более эффективным.

Если вы не хотите использовать HashMap, то, как я хотел бы это сделать, это иметь отдельные классы для класса StockItem и ShoppingCart. В ShoppingCart вы можете написать метод utlity, такой как приведенный ниже. Кроме того, вы также можете реализовать Компаратор и использовать 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); 
      } 
     } 
    } 
Смежные вопросы