Java中使用ArrayList配合Topping枚举实现披萨配料初始化及增删查操作
解决方案
1. 完善抽象父类Pizza,添加通用配料操作方法
因为所有披萨子类都需要配料的增删查操作,直接在抽象父类中定义公共方法即可,子类可以直接继承使用:
package application; import java.util.ArrayList; public abstract class Pizza { protected ArrayList<Topping> toppings = new ArrayList<Topping>(); protected Size size; public abstract double price(); // 添加配料,自带去重逻辑避免重复添加同一种配料 public boolean addTopping(Topping topping) { if(!toppings.contains(topping)) { toppings.add(topping); return true; } return false; } // 删除指定配料,返回值表示是否删除成功 public boolean removeTopping(Topping topping) { return toppings.remove(topping); } // 获取当前披萨的所有配料列表 public ArrayList<Topping> getToppings() { // 这里返回副本是为了避免外部代码直接修改内部的toppings列表,如果不需要限制也可以直接return toppings return new ArrayList<>(toppings); } // 获取当前配料总数量 public int getToppingCount() { return toppings.size(); } // 尺寸的get/set方法,后续计算价格需要用到尺寸参数 public Size getSize() { return size; } public void setSize(Size size) { this.size = size; } }
注:你需要提前定义Size枚举,示例:
public enum Size { SMALL, MEDIUM, LARGE }
2. 为子类设置默认初始配料
父类的toppings是protected修饰的,子类可以直接访问,只需要在子类的构造方法中添加默认配料即可,以豪华披萨为例:
package application; public class PizzaDeluxe extends Pizza { // 构造方法执行时就会把默认配料添加到列表中 public PizzaDeluxe() { toppings.add(Topping.Chicken); toppings.add(Topping.Mushroom); toppings.add(Topping.GreenPepper); toppings.add(Topping.Sausage); toppings.add(Topping.Onion); } @Override public double price() { // 价格计算示例,可根据自己的作业规则调整 // 基础价:小10刀、中12刀、大14刀,默认包含的5种配料不额外收费,新增配料每种1.5刀 double basePrice = switch (size) { case SMALL -> 10.0; case MEDIUM -> 12.0; case LARGE -> 14.0; default -> 0.0; }; int extraToppingNum = Math.max(0, getToppingCount() - 5); return basePrice + extraToppingNum * 1.5; } }
3. 配料操作使用示例
你在JavaFX控制器中可以直接调用上面定义的方法完成操作:
// 新建豪华披萨实例,默认已包含5种指定配料 PizzaDeluxe myPizza = new PizzaDeluxe(); // 设置披萨尺寸为大号 myPizza.setSize(Size.LARGE); // 添加额外配料菠萝 myPizza.addTopping(Topping.Pinapple); // 删除不需要的默认配料洋葱 myPizza.removeTopping(Topping.Onion); // 获取当前所有配料遍历展示 for(Topping t : myPizza.getToppings()) { System.out.println("配料:" + t); } // 获取当前披萨总价 double total = myPizza.price();
你需要了解的ArrayList基础用法
对应作业涉及的场景,你只需要掌握几个常用方法即可:
add(元素):向列表末尾添加指定类型的元素remove(元素):删除列表中第一个匹配的元素,返回布尔值表示是否删除成功contains(元素):判断列表中是否已经存在指定元素,返回布尔值size():获取列表中存储的元素总个数- 遍历可以用增强for循环:
for(Topping t : toppings) { // 逐个处理配料 }
内容的提问来源于stack exchange,提问作者Vearaa
相关产品推荐
相关产品推荐

