0

0

在Java里如何实现控制台购物车功能_Java集合操作实战说明

P粉602998670

P粉602998670

发布时间:2026-01-29 10:21:31

|

302人浏览过

|

来源于php中文网

原创

应使用ArrayList而非Array实现购物车,因其自动扩容、支持动态增删改查;需注意去重逻辑、ID定位删除、封装quantity更新方法、输入异常处理、索引越界检查、价格精度控制(推荐int分单位或BigDecimal)、清空后状态重置及购物车封装。

在java里如何实现控制台购物车功能_java集合操作实战说明

ArrayList 存商品,别用 Array

控制台购物车本质是动态增删改查,Array 长度固定,每次加商品都要手动扩容、复制,容易出错且难维护。直接用 ArrayList 更稳妥——它底层自动处理扩容,支持 add()remove(int)get(int) 等常用操作。

注意:如果商品需去重(比如同名同价只算一件),ArrayList 本身不保证唯一性,得靠业务逻辑判断,或改用 LinkedHashSet(保持插入顺序+去重)。

  • Product 类至少要有 idnamepricequantity 字段
  • 避免用 String 拼接商品信息做 key,易因空格/大小写误判重复
  • 删除时别只靠 name,优先用唯一 id 定位,防止同名商品删错

修改数量要用 set() 或封装更新方法,别直接改字段

用户输入“将商品 2 的数量改为 5”,如果直接拿到 ArrayList 里的 Product 对象,然后写 product.quantity = 5,看似快,但后续统计总价、打印列表时容易因对象状态不一致出 bug(比如没同步更新小计字段)。

更可靠的做法是:为 Product 提供 updateQuantity(int newQty) 方法,在内部校验合法性(如 newQty 则抛异常或设为 0),并可顺带重算 subtotal

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

Toolplay
Toolplay

一站式AI应用聚合生成平台

下载
  • 控制台输入解析后,务必先用 try-catch 包住 Integer.parseInt(),防止用户输 “abc” 导致程序崩溃退出
  • 修改前建议用 list.get(index) 先检查索引是否越界,IndexOutOfBoundsException 是常见运行时错误
  • 若支持“增加 3 件”而非“设为 3 件”,记得用 += 而非 =

计算总价时小心浮点数精度,用 BigDecimal 或转为分单位整数

直接用 double price = 19.99 累加多次后可能出现 59.989999999999995 这种结果,控制台显示很诡异。Java 中金融类计算必须规避 float/double

两种实用方案:
– 方案一:价格统一存为 int(单位:分),显示时除以 100.0 并格式化;
– 方案二:用 BigDecimal,构造时用字符串(new BigDecimal("19.99")),别用 double 构造器。

  • BigDecimaladd()multiply() 返回新对象,不是原地修改,别漏了赋值
  • 打印总价时用 setScale(2, RoundingMode.HALF_UP) 保证两位小数
  • 如果只是教学演示且不涉及真实金额,可用 String.format("%.2f", total) 应急,但别在实际项目里这么干

清空购物车后要重置状态,别只清 ArrayList

调用 cartList.clear() 确实能删掉所有商品,但容易忽略关联状态:比如你有个 totalAmount 变量缓存了当前总价,清空后没重置,下次加商品就从旧值累加;或者有个 nextId 计数器用于生成新商品 ID,清空后没归零,会导致 ID 不连续。

推荐做法是把购物车封装成独立类(如 ShoppingCart),提供 clear() 方法,在里面统一重置所有内部字段。

  • 不要在主循环里反复 new ArrayList() 替代清空——对象创建有开销,且可能让引用失效
  • 如果支持“恢复上次清空”,就得额外实现撤销Deque>),这已超出基础控制台需求,先放一放
  • 清空后建议输出提示语,比如 “✅ 购物车已清空”,否则用户不确定操作是否生效
控制台购物车看着简单,真正卡住人的往往不是集合语法,而是边界检查、输入容错、状态一致性这些细节。尤其是多处共用同一个 ArrayList 引用时,一个地方改乱了,其他地方读出来就是错的。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

463

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

579

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

102

2025.10.23

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

782

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

434

2024.06.27

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

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

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

8

2026.01.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 7.9万人学习

Java 教程
Java 教程

共578课时 | 52.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号