java - 如果产品 ID 相同且没有占位符为 Null,则覆盖数组中的对象
问题描述
我需要能够在 SoppingCart 中使用“addItem”方法将具有相同 pid 号的产品添加到数组中已经存在的对象并覆盖旧对象。同时,数组中不应该存在没有内容的占位符。
我认为我尝试的方式行不通,但我真的不知道这怎么可能。
这是课程:
public class ShoppingCart {
public Item[] cart;
int temporary;
int totalAmountB;
int totalAmountM;
int totalAmountD;
int totalAmountF;
public ShoppingCart() {
}
public void addItem(Item toAdd) {
if(toAdd instanceof Grocery) {
if(toAdd.pid==1) {
totalAmountB+=Grocery.getPacketCount();
cart[0]=new Grocery(toAdd.pid, toAdd.signifier, toAdd.pricePerUnit, Grocery.getExpiryDate(), totalAmountB);
}
if(toAdd.pid==2) {
totalAmountM+=Grocery.getPacketCount();
cart[1]=new Grocery(toAdd.pid, toAdd.signifier, toAdd.pricePerUnit, Grocery.getExpiryDate(), totalAmountM);
}
}
if(toAdd instanceof Article) {
if(toAdd.pid==3) {
totalAmountD+=Article.getAmount();
cart[2]=new Article(toAdd.pid, toAdd.signifier, toAdd.pricePerUnit, "lfdm", totalAmountD);
}
if(toAdd.pid==4) {
totalAmountF+=Article.getAmount();
cart[3]=new Article(toAdd.pid, toAdd.signifier, toAdd.pricePerUnit, "qm", totalAmountF);
}
}
}
主要方法
public class ShoppingMall {
public static void main(String[] args){
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Ihr digitaler Warenkorb:");
boolean loop = true;
int item = 0;
String action = "";
int pckg;
float amount = 0.0f;
ShoppingCart basket = new ShoppingCart();
while (loop) {
System.out.println("\nWelcher Artikel soll bearbeitet werden");
System.out.println("------------------------------");
System.out.println("1 Butter");
System.out.println("2 Milch");
System.out.println("3 Draht");
System.out.println("4 Fliesen");
System.out.println("\nSie haben den Einkauf abgeschlossen?\nWaehlen Sie zwischen: ");
System.out.println("------------------------------");
System.out.println("5 Warenkorb ausgeben");
System.out.println("0 Exit\n");
System.out.print("Ihre Eingabe bitte: ");
try{
item = Integer.valueOf(input.readLine());
if((item < 5) && (item > 0))
{
//System.out.println("\n------------------------------");
do{
System.out.print("Waehlen Sie + fuer hinzufuegen oder - fuer entfernen. ");
action = input.readLine();
}while(!action.equals("+") && !action.equals("-"));
}
//if(action.equals("+") || action.equals("-"))
//{
switch (item) {
case 1: {
System.out.print("Wieviele Packungen Butter ? ");
pckg = Integer.valueOf(input.readLine());
Grocery groc = new Grocery(1,"Butter",1.59f,20180618,pckg);
if(action.equals("+"))
basket.addItem(groc);
else
basket.removeItem(groc);
break;
}
case 2: {
System.out.print("Wieviele Packungen Milch ? ");
pckg = Integer.valueOf(input.readLine());
Grocery groc = new Grocery(2,"Milch",1.09f,20180618,pckg);
if(action.equals("+"))
basket.addItem(groc);
else
basket.removeItem(groc);
break;
}
case 3: {
System.out.print("Wieviele laufende Meter (lfdm) Draht? ");
amount = Float.valueOf(input.readLine());
Article art = new Article(3,"Draht",0.36f,"lfdm",amount);
if(action.equals("+"))
basket.addItem(art);
else
basket.removeItem(art);
break;
}
case 4: {
System.out.print("Wieviele Quadratmeter (qm) Fliesen ? ");
amount = Float.valueOf(input.readLine());
Article art = new Article(4,"Fliesen",20.00f,"qm",amount);
if(action.equals("+"))
basket.addItem(art);
else
basket.removeItem(art);
break;
}
case 5: {
System.out.println("\nIn Ihrem Warenkorb befindet sich:\n");
System.out.println("Artikel Menge Preis/Einheit Preis");
System.out.println("----------------------------------------------------------");
System.out.println(basket);
System.out.print("\nWeiter mit beliebiger Taste!");
input.readLine();
break;
}
case 0: {
loop = false;
System.out.println("\nProgramm beendet");
break;
}
default:
System.out.println("Ihre Eingabe wurde nicht erkannt!\n");
}
//}
//else
// System.out.println("Ihre Eingabe wurde nicht erkannt!\n");
}
catch(Exception e){
System.out.println("\nFalsche Eingabe:\nLebensmittel werden nur in ganzen Packungen abgegeben!\n"
+ "Non- Food Produkte auch in Bruchteilen der jeweiligen Einheit\n"
+ "Geben sie eine ganze Zahl bei Lebensmitteln ein oder eine \n"
+ "Gleitpunktzahl bei Non- Food Produkten.");
}
}
}
解决方案
推荐阅读
- php - 为每个用户将信息提取到 xml 文件中
- reactjs - React - 在组件之间共享数据的最有效方式
- c# - MediaElement.NaturalDuration.TimeSpan 返回错误值
- javascript - 导入/导出声明只能出现在模块的顶层
- javascript - 在 morris.bar 图表中,所有标签都没有显示但是当我放大所有标签时,所有标签都正确显示
- java - 使用数据库时可以使用类型检查代码吗?
- html - 如何禁用 Datalist 上的选项
- reactjs - 如何将孙子数据传递给 GrandParent 组件而不将数据传递给 Reactjs 中的中间组件?
- linux - 在 Linux 上使用 connect 函数时 UDP 套接字无法接收回复
- python - 在使用 python 库 rply 时,解析多行时出现意外的令牌错误。我怎样才能解决这个问题?