讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java中如何实现控制台版购物车_Java初级项目实战解析

风磊大大_6162

风磊大大_6162

发布时间:2026-02-01 10:50:02

|

884人浏览过

|

来源于php中文网

原创

基础购物车用ArrayList存商品、Scanner接收输入,需封装Product类(含id/name/price/quantity),重写equals()/hashCode(),用序号删除、价格用int存分单位、输入后调nextLine()清缓存,总价格式化输出。

在java中如何实现控制台版购物车_java初级项目实战解析

怎么用 Scanner + ArrayList 搭出基础购物车结构

控制台购物车本质是内存中的数据管理,不需要数据库或 Web 框架。核心就是用 ArrayList 存商品,用 Scanner 接收用户输入。别一上来就搞类图或 MVC 分层——先跑通“加商品→查清单→删一项→算总价”这四个动作。

关键点在于:商品最好封装成独立类(比如 Product),至少含 id、name、price、quantity 四个字段;购物车本身用 ArrayList<product></product>,而不是存字符串或数组。否则后续修改数量、按 ID 查找会非常痛苦。

常见错误:
• 把价格用 int 存(导致 9.9 元变成 9 元)→ 改用 double 或更稳妥的 BigDecimal(初级项目用 double 即可)
• 每次添加都 new 一个新 Product,但没重写 equals() → 后续删商品时用 list.remove(product) 失败
• Scanner 读完数字后没调 nextLine() 清缓存 → 下一次 nextLine() 直接返回空字符串

怎么处理用户反复输入和菜单跳转逻辑

控制台交互最易崩的地方不是功能,而是输入流错乱。别用一堆 if-else if 堆菜单,用 while (true) + switch 主循环更清晰。每次循环开头先打印菜单,结尾统一用 scanner.nextLine() 吃掉换行符。

立即学习“Java免费学习笔记(深入)”;

实操建议:
• 输入选项用 scanner.nextInt(),但之后立刻跟 scanner.nextLine()
• 所有字符串输入(如商品名)统一用 scanner.nextLine().trim(),避免空格导致匹配失败
• 输入非法数字时,hasNextInt() 比直接 try-catch 更轻量;如果用户输 “abc” 再输 “1”,不清理输入缓冲区会导致死循环
• 退出选项设为 0 或 “quit”,在 switch 外围用 break outer; 或设标志位 running = false

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载

怎么安全地从购物车删除指定商品

初学者常写 cart.remove(product),结果删不掉——因为两个 Product 对象内存地址不同,即使字段一样,equals() 默认比较的是引用。必须重写 equals() 和 hashCode(),且至少基于 id 判断相等性。

更实用的做法(尤其对初级项目):
• 提供按序号删除:遍历 cart,用 for (int i = 0; i ,打印时带上 <code>i + 1 作为序号
• 用户输入序号 n,校验 n > 0 && n ,然后 <code>cart.remove(n - 1)
• 避免用商品名删除(重名情况难处理),也别用价格删(多个商品同价很常见)
• 删除后记得提示“已移除:xxx”,并立即调用显示清单方法,让用户确认

为什么结算时总价总是不对?浮点精度和累加陷阱

用 double price = 29.99; 累加多次后输出可能是 89.96999999999999。这不是 bug,是二进制浮点数表示局限。初级项目不用上 BigDecimal,但至少得格式化输出:

System.out.printf("总计:¥%.2f\n", total);

但注意:printf 只影响显示,不修正计算过程。如果要做“满 100 减 10”这类判断,不能写 if (total >= 100.0),而应写 if (Math.abs(total - 100.0) 100.0),或更简单——所有价格内部乘 100 存 int(如 2999 表示 29.99 元),运算完再除 100.0 输出。后者对初学者更可控,也避开了 BigDecimal 的构造参数陷阱(比如 new BigDecimal(29.99) 实际是 29.989999999999998...)。

真正容易被忽略的是:用户反复添加同一商品时,应该合并数量而非新增一条记录。这需要在添加前遍历检查 cart 中是否存在相同 id 的商品——这里又回到必须重写 equals() 的问题。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

1071

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

1417

2024.03.13

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

354

2023.09.25

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

828

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1029

2023.11.28

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

2900

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

807

2025.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1798

2023.08.03

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn