2016-11-17 44 views
0

我有一個名爲ItemToPurchase的類,具有私有變量聲明和公共方法來設置和獲取這些變量的值。這個類還有一個默認的構造器和一個以String的itemName和itemDescription作爲參數的構造器。 例如:removeItem和changeQuantity方法不起作用

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類包含主,並在主要有一個打印菜單,看起來像這樣的循環。

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()方法不工作? 讓我知道你是否需要更多地瞭解代碼。

+0

'的ArrayList contains'方法和刪除方法需要類型的對象'ItemToPurchase'而不是字符串。 – iNan

+0

你怎麼知道它不工作? (雙關語意) – Sikorski

回答

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

}


參數你沒有使用,所以沒有你changeItem(我的購物車)方法。請檢查一下。

0

您的removeItem方法在ItemToPurchase的列表中查找String。 contains方法在字符串上和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; 
     } 
    } 
}