双十一购物车

This commit is contained in:
seahi 2024-11-08 08:51:52 +08:00
parent 00a5c68f22
commit 66c059eb0f

View File

@ -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());
}
}