【问题标题】:removeItem and changeQuantity methods not workingremoveItem 和 changeQuantity 方法不起作用
【发布时间】:2017-03-31 14:18:21
【问题描述】:

我有一个名为 ItemToPurchase 的类,它带有私有变量声明和公共方法来设置和获取这些变量的值。这个类也有一个默认的构造函数和一个以字符串的 itemName 和 itemDescription 作为参数的构造函数。 示例:

public class ItemToPurchase{
private String itemName;
public void setName(String name){
   ...
 }

public String getName(){
  return name;
 }
}

然后是另一个名为购物车的类,它做同样的事情,它也包含这个方法。

private ArrayList<ItemToPurchase> cartItems;
cartItems = new ArrayList<ItemToPurchase>();           

public void removeItem(String itemName) {
    if (cartItems.contains(itemName)) {
        cartItems.remove(itemName);
    } else {
        System.out.println("Item not found in cart. Nothing removed.");
    }
}

并且 ShoppingCartManager 类包含 main 并且在 main 中有一个循环打印一个看起来像这样的菜单。

ShoppingCart cart = new ShoppingCart(cName, tDate);
    public static void main(String[] args) {
    sc = new Scanner(System.in);
    ShoppingCart object = new ShoppingCart();
    System.out.println("Enter Customer's Name: ");
    String cName = sc.nextLine();
    System.out.println("Enter Today's Date: ");
    String tDate = sc.nextLine();
    System.out.println("Customer Name: " + cName + "\n" + "Today's Date: "
            + tDate);

    ShoppingCart cart = new ShoppingCart(cName, tDate);
    printMenu(cart);
}
public static void printMenu(ShoppingCart cart) {
    char input;
    do {
        System.out.println("Menu");
        System.out.println("a - Add item to cart");
        System.out.println("d - Remove item from cart");            
        System.out.println("q - Quit");
        System.out.println("");
        System.out.print("Choose an option: ");
        input = sc.next().charAt(0);
        switch (input) {
        case 'a':
            addItem(cart);
            break;
        case 'd':               
            removeItem(cart);
            break;

        default:
        }
    } while (input != 'q');
}
public static void removeItem(ShoppingCart cart) {
    System.out.println("REMOVE ITEM FROM CART");
    System.out.println("");
    System.out.print("Enter name of item to remove: ");
    String itemName = sc.next().trim();
    ShoppingCart object = new ShoppingCart();
    object.removeItem(itemName);
}
public static void changeItem(ShoppingCart cart) {
    System.out.println("CHANGE ITEM QUANTITY");
    System.out.print("Enter the item name: ");
    System.out.println("");
    String itemName = sc.next().trim();     
    System.out.println("Enter the new quantity: ");
    int nQuantity = sc.nextInt();
    ItemToPurchase oItemName = new ItemToPurchase();
    if (itemName.equals(oItemName.getName())){
    oItemName.setQuantity(nQuantity);   

    }

谁能解释为什么 removeItem() 和 changeItem() 方法不起作用? 如果您需要了解有关代码的更多信息,请告诉我。

【问题讨论】:

  • ArrayList contains 方法和删除方法需要 ItemToPurchase 类型的对象,而不是字符串。
  • 你怎么知道它不工作? (双关语)

标签: java arrays arraylist methods


【解决方案1】:
public static void removeItem(ShoppingCart cart) {
    System.out.println("REMOVE ITEM FROM CART");
    System.out.println("");
    System.out.print("Enter name of item to remove: ");
    String itemName = sc.next().trim();
    ShoppingCart object = new ShoppingCart();
    object.removeItem(itemName);

}


您没有使用的参数 cart,以及您的 changeItem(ShoppingCart cart) 方法。请检查一下。

【讨论】:

    【解决方案2】:

    您的removeItem 方法在ItemToPurchase 的列表中查找String。 contains 方法在 String 和 cartItems 中的每个对象中调用 equals 以寻找匹配项。它当然不会找到它。

    把你的方法改成这样:

    public void removeItem(String itemName) {
    
        for (int i = 0; i < cartItems.size(); i++) {
            if (cartItems.get(i).equals(itemName)) {
                cartItems.remove(i);
                break;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-08
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 2021-11-06
      相关资源
      最近更新 更多