You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:24:05