当前位置: 首页 > 知识库问答 >
问题:

更新ArrayList中的值

武睿
2023-03-14

我的程序是物品清单,每个物品由用户输入,直到达到10,然后在最后显示每个物品的总成本(成本*数量)。

但是我需要能够更新特定项目的数量。所以我想以某种方式问用户“你想更新哪个项目?”和“你想减去多少”,但是我不知道如何将项目与其具体数量联系起来。之后,我想再次显示更新后的项目列表和更新后的总成本。

是否可以作为阵列列表?或者我应该使用不同的结构?

这是一个班:

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);            
    }

共有3个答案

有骏祥
2023-03-14

HashMap将使搜索更高效。

如果您不想使用HashMap,那么我的方法是为StockItem和ShoppingCart类创建一个单独的类。在ShoppingCart中,您可以编写如下所示的方法。或者,您也可以实现一个比较器并使用列表。包含()。

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);
            }
        }
    }
慕烨烁
2023-03-14

您应该使用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 = ...
    ...
}
邴兴为
2023-03-14

如果你只是想更新列表中的元素,是的,你可以这样做。例如,如果您在列表中填写了10个StockItems,所有的stockItemQuantityAvailable都是100,并且用户想要购买第一个项目中的5个:

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

现在,如果你打印出列表,你会发现第一项有95个,剩下的100个。

 类似资料:
  • 我有一个ArrayList,里面有一堆MyObject对象。我想在我的对象中保留一个整数字段,它是ArrayList中这个对象的键,这样我就可以很容易地得到这个元素在ArrayList中的位置。 当我从这个ArrayList中删除一个对象时,会出现问题,因为索引会向左移动。避免这个问题的最佳方法是什么? 我应该不删除元素,而是用null覆盖它们(这样索引就不会移位),还是应该在删除一次之后遍历Ar

  • 问题内容: 请帮助我了解下面写的两行之间的区别,我知道两者都是有效的,但是我想知道哪一个更好? 和 问题答案: 哪一个更好? 就个人而言,我喜欢使用第一个,因为我认为对我来说更清楚了,但这是您的个人喜好,其他人的确认为这是多余的。 有什么区别? 这两行之间没有什么区别,它们在Java 7中的含义相同(如果您的目标是Java 6,请使用第一个)。 [编辑]: 同样,正如Elliott Frisch指

  • 问题内容: 我有10 秒之一。如何用另一个值更新索引? 问题答案: 让是和新的,那么就这样做: 可以在此处的Java api参考中找到。

  • 问题内容: 我有一个简单的Java程序,该程序读取一个文本文件,将其分隔为“”(空格),显示第一个单词,等待2秒,显示下一个…等等…我想在Spring或其他一些GUI。 关于如何使用spring轻松更新单词的任何建议?遍历我的列表并以某种方式使用setText(); 我没有运气。我正在使用此方法在consol中打印我的单词,并向其中添加JFrame …在consol中效果很好,但是却发出了无尽的j

  • 我想在字符串与给定值匹配时更新该值 有没有人可以使用Java streams API来实现上述功能