双十一购物车
This commit is contained in:
parent
02bb45886d
commit
e645d37dad
132
src/chapter5/ShoppingCart.java
Normal file
132
src/chapter5/ShoppingCart.java
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user