如何实现Box鲜花存储类与价目表?含FloristsTest代码相关问题
嘿,我来帮你搞定这两个问题——Box类的实现和动态定价的逻辑,结合你的FloristsTest类一步步梳理:
鲜花存储与动态定价实现方案
一、Box类的实现(鲜花存放与存储)
Box类的核心就是帮你管理不同颜色的鲜花数量,要能方便地添加鲜花、查询某颜色的数量。用HashMap<String, Integer>来存颜色和对应数量的映射是最优解,查询和修改效率都高。给你写个实用的实现:
public class Box { // 用HashMap存储颜色到数量的映射,键是鲜花颜色,值是该颜色的数量 private final HashMap<String, Integer> flowerInventory = new HashMap<>(); // 添加指定数量的某颜色鲜花,自动累加已有数量 public void addFlowers(String color, int count) { flowerInventory.put(color, flowerInventory.getOrDefault(color, 0) + count); } // 获取指定颜色的鲜花数量,没有的话返回0 public int getFlowerCount(String color) { return flowerInventory.getOrDefault(color, 0); } // 可选:清空箱子里的所有鲜花 public void clear() { flowerInventory.clear(); } }
这个类很简洁:addFlowers方法会自动处理数量累加(比如原来有3朵红玫瑰,再加2朵就变成5朵),getFlowerCount能快速查到某颜色的数量,完全满足存放和存储的需求。
二、价目表与动态定价逻辑实现
你说用HashMap做价目表是对的,我们可以把价目表放在FloristsTest类里统一管理,这样就能从这里获取价格,同时实现数量不同的单价规则。
这里的思路是:用静态HashMap存储不同颜色的基础单价,然后在valueOf方法里根据鲜花数量调整单价——数量超过5时用优惠价7,≤5时用基础价(默认8)。完善后的FloristsTest类如下:
import java.util.HashMap; public class FloristsTest { // 静态价目表:存储不同颜色的基础单价 private static final HashMap<String, Integer> PRICE_LIST = new HashMap<>(); // 初始化价目表,这里可以添加任意颜色的基础价 static { PRICE_LIST.put("red", 8); PRICE_LIST.put("blue", 8); PRICE_LIST.put("yellow", 8); } // 计算指定颜色鲜花的总价值 static int valueOf(Box box, String color) { int flowerCount = box.getFlowerCount(color); if (flowerCount == 0) { return 0; // 没有该颜色鲜花,价值为0 } // 获取基础单价,未知颜色默认用8 int basePrice = PRICE_LIST.getOrDefault(color, 8); // 根据数量判断最终单价:超5用7,否则用基础价 int unitPrice = flowerCount > 5 ? 7 : basePrice; // 总价值 = 数量 × 单价 return flowerCount * unitPrice; } public static void main(String[] args) { // 测试示例 Box myBox = new Box(); // 添加6朵红色鲜花,数量超5,单价7,总价值42 myBox.addFlowers("red", 6); System.out.println("Red flowers value: " + valueOf(myBox, "red")); // 输出42 // 添加3朵蓝色鲜花,数量≤5,单价8,总价值24 myBox.addFlowers("blue", 3); System.out.println("Blue flowers value: " + valueOf(myBox, "blue")); // 输出24 // 再添加2朵红色鲜花,总数8,仍用单价7,总价值56 myBox.addFlowers("red", 2); System.out.println("Red flowers value after adding: " + valueOf(myBox, "red")); // 输出56 } }
关键逻辑说明:
- 价目表管理:静态的
PRICE_LIST在类加载时初始化,所有价格都集中在FloristsTest里,符合你“从FloristsTest获取价格”的需求,后续修改价格也只需要改这里。 - 动态定价:
valueOf方法先从Box中拿到鲜花数量,再根据数量判断单价——如果数量超过5,就用优惠价7,否则用价目表里的基础价(未知颜色默认用8),逻辑清晰还容易扩展。 - 职责分离:Box类只负责存鲜花,FloristsTest负责价格计算,符合单一职责原则,代码更易维护。
内容的提问来源于stack exchange,提问作者Jakub trolololoization Dobrze
相关产品推荐
相关产品推荐

