双十一购物车

This commit is contained in:
seahi 2024-11-07 18:36:18 +08:00
parent 02bb45886d
commit e645d37dad

View File

@ -0,0 +1,132 @@
package chapter5;
/**
* 双十一购物车
* 需求
* 1. 添加商品到购物车商品名称用StringBuilder拼接
* 2. 显示购物车商品清单把StringBuilder转换为String输出
* 3. 修改商品名称用String的replace方法
* 4. 删除购物车某个商品用StringBuilder的delete方法
* 5. 计算购物车商品总价
*/
public class ShoppingCart {
private StringBuilder cart; // 购物车商品列表
private double totalPrice; // 总价格
/**
* 构造方法思路
* 1. 创建空的购物车使用StringBuilder存储商品信息
* 2. 初始化总价为0
* 为什么使用StringBuilder因为购物车内容会经常变动StringBuilder更适合频繁修改
*/
public ShoppingCart() {
cart = new StringBuilder();
totalPrice = 0.0;
}
/**
* addItem方法思路
* 1. 判断购物车是否为空
* - 如果不空需要先添加分隔符", "
* - 如果是空的直接添加商品
* 2. 拼接商品信息商品名(价格)
* 例如小米手机(1999.0)
* 3. 更新总价
*
* 考虑为什么要加if判断
* - 为了避免第一个商品前也加逗号
* - 让商品列表更美观商品1(xx), 商品2(xx), 商品3(xx)
*/
public void addItem(String item, double price) {
if (!cart.isEmpty()) {
cart.append(", ");
}
cart.append(item).append("(¥").append(price).append(")");
totalPrice += price;
}
/**
* showCart方法思路
* 1. 先判断购物车是否为空
* - 如果为空返回提示信息
* - 如果不为空显示商品清单和总价
* 2. 把StringBuilder转换为String返回
*
* 为什么要转换成String
* - String更适合显示最终结果
* - println方法接收String类型参数
*/
public String showCart() {
if (cart.isEmpty()) {
return "购物车是空的呢,快去选购吧!";
}
return "购物车商品: " + cart.toString() + "\n总价: ¥" + totalPrice;
}
/**
* modifyItem方法思路
* 1. 先将StringBuilder转换为String
* 2. 使用String的replace方法替换商品名
* 3. 将修改后的String再转回StringBuilder
*
* 为什么要转换来转换去
* - String的replace方法使用更方便
* - StringBuilder没有直接的替换方法
* 注意这里没有修改价格实际项目中可能需要考虑价格变化
*/
public void modifyItem(String oldItem, String newItem) {
String cartStr = cart.toString();
cartStr = cartStr.replace(oldItem, newItem);
cart = new StringBuilder(cartStr);
}
/**
* removeItem方法思路
* 1. 找到要删除商品名的起始位置indexOf
* 2. 如果找到了start != -1
* - 找到这个商品信息的结束位置")"的位置再+1
* - 如果后面还有商品则多删除", "这两个字符
* 3. 使用StringBuilder的delete方法删除
* 4. 更新总价
*
* 难点解析
* end < cart.length() && cart.charAt(end) == ','
* - 为什么要判断end < cart.length()避免数组越界
* - 为什么要判断逗号确保后面还有其他商品
*/
public void removeItem(String item, double price) {
int start = cart.indexOf(item);
if (start != -1) {
int end = cart.indexOf(")", start) + 1;
if (end < cart.length() && cart.charAt(end) == ',') {
end += 2; // 删除后面的逗号和空格
}
cart.delete(start, end);
totalPrice -= price;
}
}
public static void main(String[] args) {
// 测试购物车
ShoppingCart cart = new ShoppingCart();
System.out.println(cart.showCart());
System.out.println();
// 添加商品
cart.addItem("小米手机", 1999.0);
cart.addItem("耳机", 299.0);
cart.addItem("充电器", 39.9);
System.out.println("添加商品后:");
System.out.println(cart.showCart());
// 修改商品名称
cart.modifyItem("小米手机", "华为手机");
System.out.println("\n修改商品后");
System.out.println(cart.showCart());
// 删除商品
cart.removeItem("耳机", 299.0);
System.out.println("\n删除商品后");
System.out.println(cart.showCart());
}
}