如何使用 oop 在 ArrayList 中添加对象?
How do I add objects inside an ArrayList using oop?
我有 classes“BaseProduct”——抽象,“Food”——实现 BaseProduct 和一个“Cart”,里面放了很多食物。
那么我如何将食物放入购物车以及如何添加他们的保质期折扣(保质期前 5 天,他们获得 10% 的折扣)?
我还应该创建一个 class“收银台”,它具有打印收据的方法。该方法接受“购物车”(产品集合)以及购买日期和时间。它应该打印所有购买的产品及其价格、数量、总金额和总折扣。
如有帮助将不胜感激
Class BaseProduct 如下所示:
public abstract class BaseProduct {
private String name;
private String brand;
private Double price;
protected BaseProduct(String name, String brand, Double price) {
this.name = name;
this.brand = brand;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
Class食物看起来像这样:
package Products.PerishableProducts;
import Products.BaseProduct;
import java.util.Date;
public class Food extends BaseProduct {
private Date expirationDate;
//sample date - 2020/04/20 -> yyyy-MM-dd
//TODO:CHECK WHETHER OR NOT YOU HAVE EXPIRATION DATE DISCOUNTS WHEN ADDING ITEMS IN CART
public Food(String name, String brand, Double price, Date expirationDate) {
super(name, brand, price);
this.expirationDate = expirationDate;
}
public Date getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(Date expirationDate) {
this.expirationDate = expirationDate;
}
}
Class“Cart”(购物车)如下所示:
package Cart;
import Products.BaseProduct;
import java.util.List;
public class Cart {
private static List<BaseProduct> products;
//TODO:add products
public List<BaseProduct> add(List<BaseProduct> products){
}
//TODO: remove products
}
将产品添加到购物车
写完 Cart::add 方法。
初始化产品列表会有所帮助。然后查看您选择的列表实现上的添加方法。
申请折扣。
使用 getprice(Date purchaseDate) 方法重载 Food 中的 getPrice 方法。 return super.getPrice() 的价格减去适当的折扣。
您可能会发现 getDiscount(Date purchaseDate) 方法很有用,因为收银员 class 想要总折扣。
为什么您的产品列表是静态的?
要初始化列表,您可以做两件事:
a. Eager initialization:
private List<BaseProduct> products = new ArrayList<>();
public void add(BaseProduct product) {
this.products.add(product);
}
b. Lazy Initialization:
public void add(BaseProduct product) {
if (this.products == null) {
this.products = new ArrayList<>();
}
this.products.add(product);
}
如果这回答了您的问题或您有任何其他疑问,请告诉我。
可以有多种方法来解决这个问题。如果我们考虑在哪里有折扣,显然是在计算产品价格时。所以我会重构 Food
class 如下:
import java.time.LocalDate;
public class Food extends BaseProduct {
// Use LocalDate instead of the outdated Date class. It is way easier to use and to avoid some common pitfalls
private LocalDate expirationDate;
public Food(String name, String brand, Double price, LocalDate expirationDate) {
super(name, brand, price);
this.expirationDate = expirationDate;
}
public LocalDate getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(LocalDate expirationDate) {
this.expirationDate = expirationDate;
}
// Override the calculation of the price of a Food product and apply the discount
@Override
public Double getPrice() {
return super.getPrice() * (1.0 - getDiscount());
}
// Calculate the discount percentage. If the expiration day is less than 5 days compared to current day, return a 10% discount, otherwise return 0
private Double getDiscount() {
return expirationDate.minusDays(5).isAfter(LocalDate.now()) ? 0.0 : 0.1;
}
}
现在,在 Cart
的情况下,我们可能关心客户愿意支付的总价。所以我们可以写出如下方法:
import java.util.ArrayList;
import java.util.List;
public class Cart {
List<BaseProduct> products = new ArrayList<>();
public void addProduct(BaseProduct product) {
products.add(product);
}
// Returns the total price of the items currently in our cart. Discount is applied to the items which are eligible
public Double getTotalPrice() {
return products.stream().mapToDouble(BaseProduct::getPrice).sum();
}
}
我们可以使用Cart
和以下方式:
public static void main(String[] args) {
BaseProduct cheese = new Food("cheese", "CheeseBrand", 10.0, LocalDate.of(2021, 10, 1));
BaseProduct vine = new Food("vine", "Vine", 50.0, LocalDate.of(2025, 12, 1));
Cart cart = new Cart();
cart.addProduct(cheese);
cart.addProduct(vine);
System.out.println(cart.getTotalPrice());
}
假设当前日期是:2021 年 10 月 31 日,对于上面的示例,我们将得到以下总金额:59.0
。
另外,我们可能要考虑如果有过期产品会发生什么情况。现在,我们对其应用 10% 的折扣,我们可能不希望能够将商品放入购物车。
我有 classes“BaseProduct”——抽象,“Food”——实现 BaseProduct 和一个“Cart”,里面放了很多食物。
那么我如何将食物放入购物车以及如何添加他们的保质期折扣(保质期前 5 天,他们获得 10% 的折扣)?
我还应该创建一个 class“收银台”,它具有打印收据的方法。该方法接受“购物车”(产品集合)以及购买日期和时间。它应该打印所有购买的产品及其价格、数量、总金额和总折扣。 如有帮助将不胜感激
Class BaseProduct 如下所示:
public abstract class BaseProduct {
private String name;
private String brand;
private Double price;
protected BaseProduct(String name, String brand, Double price) {
this.name = name;
this.brand = brand;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
Class食物看起来像这样:
package Products.PerishableProducts;
import Products.BaseProduct;
import java.util.Date;
public class Food extends BaseProduct {
private Date expirationDate;
//sample date - 2020/04/20 -> yyyy-MM-dd
//TODO:CHECK WHETHER OR NOT YOU HAVE EXPIRATION DATE DISCOUNTS WHEN ADDING ITEMS IN CART
public Food(String name, String brand, Double price, Date expirationDate) {
super(name, brand, price);
this.expirationDate = expirationDate;
}
public Date getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(Date expirationDate) {
this.expirationDate = expirationDate;
}
}
Class“Cart”(购物车)如下所示:
package Cart;
import Products.BaseProduct;
import java.util.List;
public class Cart {
private static List<BaseProduct> products;
//TODO:add products
public List<BaseProduct> add(List<BaseProduct> products){
}
//TODO: remove products
}
将产品添加到购物车 写完 Cart::add 方法。 初始化产品列表会有所帮助。然后查看您选择的列表实现上的添加方法。
申请折扣。 使用 getprice(Date purchaseDate) 方法重载 Food 中的 getPrice 方法。 return super.getPrice() 的价格减去适当的折扣。 您可能会发现 getDiscount(Date purchaseDate) 方法很有用,因为收银员 class 想要总折扣。
为什么您的产品列表是静态的?
要初始化列表,您可以做两件事:
a. Eager initialization:
private List<BaseProduct> products = new ArrayList<>();
public void add(BaseProduct product) {
this.products.add(product);
}
b. Lazy Initialization:
public void add(BaseProduct product) {
if (this.products == null) {
this.products = new ArrayList<>();
}
this.products.add(product);
}
如果这回答了您的问题或您有任何其他疑问,请告诉我。
可以有多种方法来解决这个问题。如果我们考虑在哪里有折扣,显然是在计算产品价格时。所以我会重构 Food
class 如下:
import java.time.LocalDate;
public class Food extends BaseProduct {
// Use LocalDate instead of the outdated Date class. It is way easier to use and to avoid some common pitfalls
private LocalDate expirationDate;
public Food(String name, String brand, Double price, LocalDate expirationDate) {
super(name, brand, price);
this.expirationDate = expirationDate;
}
public LocalDate getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(LocalDate expirationDate) {
this.expirationDate = expirationDate;
}
// Override the calculation of the price of a Food product and apply the discount
@Override
public Double getPrice() {
return super.getPrice() * (1.0 - getDiscount());
}
// Calculate the discount percentage. If the expiration day is less than 5 days compared to current day, return a 10% discount, otherwise return 0
private Double getDiscount() {
return expirationDate.minusDays(5).isAfter(LocalDate.now()) ? 0.0 : 0.1;
}
}
现在,在 Cart
的情况下,我们可能关心客户愿意支付的总价。所以我们可以写出如下方法:
import java.util.ArrayList;
import java.util.List;
public class Cart {
List<BaseProduct> products = new ArrayList<>();
public void addProduct(BaseProduct product) {
products.add(product);
}
// Returns the total price of the items currently in our cart. Discount is applied to the items which are eligible
public Double getTotalPrice() {
return products.stream().mapToDouble(BaseProduct::getPrice).sum();
}
}
我们可以使用Cart
和以下方式:
public static void main(String[] args) {
BaseProduct cheese = new Food("cheese", "CheeseBrand", 10.0, LocalDate.of(2021, 10, 1));
BaseProduct vine = new Food("vine", "Vine", 50.0, LocalDate.of(2025, 12, 1));
Cart cart = new Cart();
cart.addProduct(cheese);
cart.addProduct(vine);
System.out.println(cart.getTotalPrice());
}
假设当前日期是:2021 年 10 月 31 日,对于上面的示例,我们将得到以下总金额:59.0
。
另外,我们可能要考虑如果有过期产品会发生什么情况。现在,我们对其应用 10% 的折扣,我们可能不希望能够将商品放入购物车。