I need some help cause I got stuck. I have an ArrayList called orderList with type ItemOrdered(int quantity,Item item). I want to set a new value for item's quantity where the given item exists into ArrayList. I tried everything but didn't work.
//place new order from buyer class
public void placeOrder(int quantity, Item item) {
//ItemOrdered newitemordered = new ItemOrdered(quantity,item );
ShoppingCart shoppingCart = new ShoppingCart();
shoppingCart.addItemOrdered(quantity,item);
}
//call placeOrder method
buyer.placeOrder(quantity,eshop.ItemListPen.get(x));
import java.util.ArrayList;
public class ShoppingCart {
public ArrayList<ItemOrdered> orderList = new ArrayList<ItemOrdered>();
public void addItemOrdered(int quantity,Item item) {
if(item.getStock() >= quantity && (!item.equals(orderList))){
ItemOrdered newitemordered = new ItemOrdered(quantity,item);
orderList.add(new ItemOrdered(quantity,item));
}else if(item.getStock() < quantity){
System.out.println("Sorry,this quantity is not available in stock.");
}else{
orderList.get(item).setQuantity(quantity);
System.out.println("nothing");
}
}
}
public class ItemOrdered {
static Item item;
private int quantity;
public ItemOrdered(int quantity, Item item){
this.quantity=quantity;
this.item=item;
}
public void setQuantity(int x){
quantity=quantity + x;
}
}
It looks like you're always going to enter the if
block of your if-else if-else
when the stock is greater than or equal to quantity because the second condition, (.item.equals(orderList))
, will be true. This condition should check to see if the list contains the item, not that the list and the item are equal. The next piece of the puzzle is that the objects in orderList
are ItemOrdered
objects and not Item
objects. That being the case, simply doing .orderList.contains(item)
will also always return true.
You could solve this by having a list containing Item
objects as part of your ShoppingCart
, or adding a new method to loop through the orderList
and check item
against each Item
in the list.
Option #1 - Adding a new List of Item
objects to ShoppingCart
:
public class ShoppingCart {
public ArrayList<ItemOrdered> orderList = new ArrayList<ItemOrdered>();
// This could also be public if you needed for some reason, but you could also achieve that by adding getter and setter methods
// depending on version of Java, you may need to include Item in <> when creating the new list: new ArrayList<Item>()
private ArrayList<Item> itemsInCart = new ArrayList<>();
public void addItemOrdered(int quantity,Item item) {
if(item.getStock() >= quantity && !itemsInCart.contains(item)){
ItemOrdered newitemordered = new ItemOrdered(quantity,item); // this could be removed, and you just create the new ItemOrdered within .add() on the next line
orderList.add(newitemordered);
itemsInCart.add(item); // have to update the new list of items
}else if(item.getStock() < quantity){
System.out.println("Sorry,this quantity is not available in stock.");
}else{
orderList.get(item).setQuantity(quantity);
System.out.println("nothing");
}
}
}
Option #2 - Looping through the orderList:
public class ShoppingCart {
public ArrayList<ItemOrdered> orderList = new ArrayList<ItemOrdered>();
public void addItemOrdered(int quantity,Item item) {
if(item.getStock() >= quantity && !isItemInCart(item)){
orderList.add(new ItemOrdered(quantity,item));
}else if(item.getStock() < quantity){
System.out.println("Sorry,this quantity is not available in stock.");
}else{
orderList.get(item).setQuantity(quantity);
System.out.println("nothing");
}
}
private boolean isItemInCart(Item item){
for(ItemOrdered itemOrdered : orderList){
if(itemOrdered.getItem().equals(item)){
return true;
}
}
// Item is not in cart
return false;
}
}
public class ItemOrdered {
static Item item;
private int quantity;
public ItemOrdered(int quantity, Item item){
this.quantity=quantity;
this.item=item;
}
public void setQuantity(int x){
quantity=quantity + x;
}
public Item getItem(){
return this.item;
}
}
Notes on the different options:
orderList
is exceedingly large (probably not a huge deal for most practical cases).equals()
method of Item
to define exactly what's being compared to determine if two items are equal
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.