From 66c059eb0f428e57eaa9590bbe8bc24fe6fbfa94 Mon Sep 17 00:00:00 2001 From: seahi Date: Fri, 8 Nov 2024 08:51:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8C=E5=8D=81=E4=B8=80=E8=B4=AD=E7=89=A9?= =?UTF-8?q?=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chapter5/ShoppingCart.java | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/chapter5/ShoppingCart.java b/src/chapter5/ShoppingCart.java index bf9b806..5c704a5 100644 --- a/src/chapter5/ShoppingCart.java +++ b/src/chapter5/ShoppingCart.java @@ -106,6 +106,66 @@ public class ShoppingCart { } } + /** + * 清空购物车方法思路: + * 1. 使用StringBuilder的setLength(0)清空购物车内容 + * - 比创建新对象更高效 + * - 比delete(0,length)更简洁 + * 2. 重置总价为0 + * + * 为什么用setLength(0)而不是cart = new StringBuilder()? + * - setLength(0)只是将长度设为0,原有空间仍可重用 + * - 创建新对象会产生额外的内存开销 + */ + public void clearCart() { + cart = new StringBuilder(); + totalPrice = 0.0; + } + + /** + * 对购物车中指定商品应用折扣 + * 折扣范围: 0.0-1.0 (例如0.8表示8折) + * 实现思路: + * 1. 检查折扣是否合法 + * 2. 在购物车中查找商品 + * 3. 提取商品原价 + * 4. 计算新价格并更新购物车 + * 5. 更新总价 + * + * @param item 要打折的商品名称 + * @param discount 折扣率(0.0-1.0) + * @throws IllegalArgumentException 当折扣不在有效范围内时抛出 + */ + public void applyDiscount(String item, double discount) { + // 验证折扣是否合法 + if (discount <= 0.0 || discount >= 1.0) { + throw new IllegalArgumentException("折扣必须在0.0到1.0之间"); + } + + // 查找商品在购物车中的位置 + String cartStr = cart.toString(); + int itemStart = cartStr.indexOf(item); + if (itemStart == -1) { + return; // 商品不存在,直接返回 + } + + // 提取价格信息 + int priceStart = cartStr.indexOf("¥", itemStart); + int priceEnd = cartStr.indexOf(")", priceStart); + double originalPrice = Double.parseDouble(cartStr.substring(priceStart + 1, priceEnd)); + + // 计算新价格 + double newPrice = originalPrice * discount; + + // 更新总价 + totalPrice = totalPrice - originalPrice + newPrice; + + // 更新购物车中的价格 + String oldPriceStr = String.format("¥%.1f", originalPrice); + String newPriceStr = String.format("¥%.1f", newPrice); + cart.replace(priceStart, priceEnd, newPriceStr); + } + public static void main(String[] args) { // 测试购物车 ShoppingCart cart = new ShoppingCart(); @@ -124,9 +184,19 @@ public class ShoppingCart { System.out.println("\n修改商品后:"); System.out.println(cart.showCart()); + // 应用商品折扣 + cart.applyDiscount("耳机", 0.8); + System.out.println("\n应用折扣后:"); + System.out.println(cart.showCart()); + // 删除商品 cart.removeItem("耳机", 299.0); System.out.println("\n删除商品后:"); System.out.println(cart.showCart()); + + // 清空购物车 + cart.clearCart(); + System.out.println("\n清空购物车后:"); + System.out.println(cart.showCart()); } }