Java 制作食品篮

Java 制作食品篮,java,Java,因此,我试图创建一个程序,允许用户将物品放入购物篮中 步骤1:用户应该能够添加带有名称和价格的杂货项目 步骤2:篮子上不应添加重复的名称 第3步:用户应该能够删除给定名称的杂货项目 步骤4:用户应该能够看到篮子中的所有内容 我知道我几乎完成了,但我坚持第三步和第四步,有什么建议吗 这是我的密码 public class Main { public static void main(String[] args) { Scanner myReader = new Scanner(System

因此,我试图创建一个程序,允许用户将物品放入购物篮中

  • 步骤1:用户应该能够添加带有名称和价格的杂货项目
  • 步骤2:篮子上不应添加重复的名称
  • 第3步:用户应该能够删除给定名称的杂货项目
  • 步骤4:用户应该能够看到篮子中的所有内容
我知道我几乎完成了,但我坚持第三步和第四步,有什么建议吗

这是我的密码

public class Main {

public static void main(String[] args) {

Scanner myReader = new Scanner(System.in);    

    while (true) {
    System.out.println("What would you want to do today?");
    System.out.println("(A)dd grocery item\n(R)emove grocery item\n(S)ee all items"); 
    System.out.println("Enter Command: ");
    String toDo = myReader.nextLine();

        if (toDo.equals("A")) {
            System.out.print("New Item Name: ");
            String grocery = myReader.nextLine();
            GroceryPackage grocery1 = new GroceryPackage();
            grocery1.addGrocery(grocery);
            System.out.print("New Item Price: ");
            String groceryPrice = myReader.nextLine();
            grocery1.addGrocery(groceryPrice);
            System.out.println("Added new item Succesfully!");

        }
        if (toDo.equals("R")) {
            System.out.print("Name of the Item you want to Remove: ");
            String removeItem = myReader.nextLine();
            removeItem.removeGrocery(grocery);


        }
        if (toDo.equals("S")) {
            System.out.print(GroceryPackage);
        }

        System.out.println("Thanks!");
    }


}


}

public class GroceryPackage {
private String addGrocery;
private boolean groceryPrice;
private String removeGrocery;
private String grocery1;


public void setGrocery1(String grocery1) {
    this.grocery1 = grocery1;

}

public void setListofGrocery(ArrayList<String> listofGrocery) {
    this.listofGrocery = listofGrocery;
}
private ArrayList<String> listofGrocery;

public GroceryPackage(String addGrocery, boolean groceryPrice) {
    this.addGrocery = addGrocery;
    this.groceryPrice = groceryPrice;                
}

public GroceryPackage() {
    this.listofGrocery = new ArrayList<String>();
}

public void addGrocery(String grocery){
    if (!this.listofGrocery.contains(grocery)){
        this.listofGrocery.add(grocery);
    }
}

public void printGrocery(){
    for (String food: this.listofGrocery){
        System.out.println(food);
    }
}

public void removeGrocery(){
    this.listofGrocery.clear();
}

public void setAddGrocery(String addGrocery) {
    this.addGrocery = addGrocery;
}

public void setGroceryPrice(boolean groceryPrice) {
    this.groceryPrice = groceryPrice;
}

public void setRemoveGrocery(String removeGrocery) {
    this.removeGrocery = removeGrocery;
}

public String getAddGrocery() {
    return addGrocery;
}

public boolean getGroceryPrice() {
    return groceryPrice;
}

public String getRemoveGrocery() {
    return removeGrocery;
}
}

不幸的是,这个程序有太多的错误,使它成为一个简单的修复。你真的需要缩减你的程序,让它尽可能简单。您的程序比需要的大得多

同一文件中不能有两个公共类。您的“GroceryPackage”类似乎没有提供任何您不能使用ArrayList变量“listofGrocery”本身的方法来完成的事情,除了跟踪价格(它没有做到)。它不必要地使程序复杂化

您可以尝试完全删除它的“public”关键字,或者使它成为Main的私有或静态内部类。不过,我还是建议你把它扔掉。我真的认为你不需要它

从技术上讲,您还没有完成步骤2。没有任何东西可以阻止ArrayList中的重复值。我会使用
HashMap
。这将允许您将“杂货”存储为字符串,其价格为双倍值

您可以在GroceryPackage中使用“getter”和“setter”方法来获取、修改和返回您的ArrayList,直接使用
GroceryPackage.ListOfRogery
(如果变量是私有的,则ListOfRocery将不起作用),或者将其作为主类的属性。最后一个是最简单的选择

我注意到您实际上从未将“listofGrocery”变量初始化为“GroceryPackage”的属性

在文体上,“listofGrocery”应该是“listofGrocery”

在GroceryList中不使用“grocery1”属性

要解决第二步,不应在篮子上添加重复的名称

迭代数据结构中的所有值,或者使用一个数据结构,如果要添加的值内部有重复项,则该数据结构会引发异常或返回可预测的值排序。确保无论做什么,都不会替换数据结构中已有的任何值

要解决第三步,“用户应该能够移除给定名称的杂货项目。”

您尝试为“removeGrocery()”方法提供一个参数,即使它不接受任何参数。另外,clear()方法删除整个ArrayList中的所有值。仔细查看可用于所选数据结构的方法

对于第四步,“用户应该能够看到篮子中的所有内容。”

遍历篮子中的所有内容

总之。


我基本上避免给你对你的计划问题的直接回答。然而,希望你能接受我所说的,并意识到你错在哪里。实际上,有数千种不同的方法可以让您的程序满足需求。一定要仔细阅读网上的文章。它们是无价的。最后,我注意到您在程序中从不使用任何循环。他们是新手程序员最好的朋友。学会爱他们。

你能说得更具体些吗?第3项听起来很简单:查找并删除。您遇到了什么问题(比“我卡住了”更具体)?代码中有什么?您必须用特定的术语来描述您的问题,例如“当我尝试删除元素时,为什么会有IndexOutOfBounds异常:?”。否则,这是你的锻炼,你应该自己做。我们很乐意帮助您解决技术问题,而不是为您解决硬件问题。在某种程度上,因为非常基本的问题也不受欢迎。您必须将添加的项保留在全局变量中(可能位于
java.util.Set
)。目前,您的“添加”代码没有这样做。在
杂货店1.添加杂货店(杂货店)
grocery1
只是一个局部变量,在退出该
if
块后,该变量将不可用。在“删除”代码中,您有
String removietem=myReader.nextLine();搬家(杂货店)
removietem
是一个
String
对象。因此,
String
类中没有
removeGrocery()
方法。
What would you want to do today?
(A)dd grocery item
(R)emove grocery item?
(S)ee all items?
A
New Item name:
Carrot
New Item price:
100
Added new item successfully
What would you want to do today?
(A)dd grocery item
(R)emove grocery item?
(S)ee all items?
A
New Item name:
Pineapple
New Item price:
20
Added new item successfully
What would you want to do today?
(A)dd grocery item
(R)emove grocery item?
(S)ee all items?
R
Name of item you want to remove:
Pineapple
Removed new item successfully
What would you want to do today?
(A)dd grocery item
(R)emove grocery item?
(S)ee all items?
S
Carrot , P100.0

What would you want to do today?
(A)dd grocery item
(R)emove grocery item?
(S)ee all items?