我的程序是物品清单,每个物品由用户输入,直到达到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);
}
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);
}
}
}
您应该使用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 = ...
...
}
如果你只是想更新列表中的元素,是的,你可以这样做。例如,如果您在
列表
中填写了10个StockItem
s,所有的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来实现上述功能