在Java中实现控制台记账程序_Java输入输出综合练习说明
发布时间 - 2026-01-02 00:00:00 点击率:次应使用Record类封装账目字段并存入ArrayList,用hasNextDouble()预检金额、nextLine()配合trim()和正则校验日期,PrintWriter追加写入,BufferedReader加载时先判空再分段校验。
如何用 Scanner 安全读取用户输入的金额和日期
控制台记账程序最常崩在输入环节:用户输个字母,nextDouble() 直接抛 InputMismatchException;输完金额按回车,nextLine() 却读到空字符串——这是 nextXxx() 留下的换行符没清掉。
- 金额统一用
nextDouble()+hasNextDouble()预检,避免异常中断流程 - 日期字符串(如
"2025-05-20")必须用nextLine(),且调用前加一次scanner.nextLine()消费残留换行符 - 别信用户会乖乖按格式输,用
String.trim()清空首尾空格,再用正则\\d{4}-\\d{2}-\\d{2}校验格式
用 ArrayList 存数据时为什么不能直接存 double 和 String
记一笔账至少要带时间、类型(收入/支出)、金额、备注。如果把四个字段拆成四个平行 ArrayList,删第 3 条记录时得同步删四个列表的索引 2,极易错位;更麻烦的是排序或按日期过滤时,你得自己维护所有列表的下标映射。
- 定义一个
Record类,封装date、type、amount、note四个字段 - 用单个
ArrayList存所有账目,增删改查都只操作一个容器 - 重写
toString()方便打印,比如返回"2025-05-20 支出 ¥128.50 外卖"
保存到文件时为什么推荐用 PrintWriter 而不是 FileWriter
FileWriter 写字符串没问题,但记账程序要写多行结构化数据(每笔一条),还得支持追加、自动换行、编码控制——这些 FileWriter 都得手动处理,而 PrintWriter 开箱即用。
- 构造时传
new FileWriter("records.txt", true)实现追加模式 - 直接调
printWriter.println(record.toString()),自动换行且不抛IOException(错误靠checkError()查) - 务必在程序退出前调
printWriter.close(),否则缓冲区内容可能丢失
从文件加载历史记录时怎么跳过空行和非法格式行
用户可能手动编辑过 records.txt,导致某行缺字段、日期格式错、金额非数字。用 BufferedReader 逐行读取后,必须校验再解析,不能无脑 split(" ")。
String line = bufferedReader.readLine();
if (line == null || line.trim().isEmpty()) continue;
String[] parts = line.split(" ", 4); // 最多切4段,防止备注里有空格被误切
if (parts.length != 4) continue;
// 再分别校验 parts[0] 是否为日期、parts[2] 是否能 parseDouble...
关键点在于:先判空再切分,切分用限定次数,校验放在解析前——否则 NumberFormatException 又会打断加载流程。
日期字符串转 LocalDate 时别用已废弃的 SimpleDateFormat,直接用 LocalDate.parse(parts[0]),它默认支持 "yyyy-MM-dd" 格式。
# java
# 编码
# 外卖
# yy
# 为什么
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
javascript中对象的定义、使用以及对象和原型链操作小结
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel怎么在Blade中安全地输出原始HTML内容
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
详解Oracle修改字段类型方法总结
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何在万网主机上快速搭建网站?
怎样使用JSON进行数据交换_它有什么限制
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
微信小程序 input输入框控件详解及实例(多种示例)
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
javascript中的try catch异常捕获机制用法分析
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Java类加载基本过程详细介绍
使用Dockerfile构建java web环境
如何在 Pandas 中基于一列条件计算另一列的分组均值
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
Laravel如何处理表单验证?(Requests代码示例)
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
网站优化排名时,需要考虑哪些问题呢?
如何用VPS主机快速搭建个人网站?
EditPlus中的正则表达式实战(6)
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
如何在阿里云购买域名并搭建网站?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
千库网官网入口推荐 千库网设计创意平台入口
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
如何快速重置建站主机并恢复默认配置?
韩国服务器如何优化跨境访问实现高效连接?
装修招标网站设计制作流程,装修招标流程?
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
bing浏览器学术搜索入口_bing学术文献检索地址
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
EditPlus中的正则表达式 实战(4)
Laravel如何记录自定义日志?(Log频道配置)
如何用5美元大硬盘VPS安全高效搭建个人网站?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Python高阶函数应用_函数作为参数说明【指导】
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Android 常见的图片加载框架详细介绍
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何在阿里云服务器自主搭建网站?
微信小程序 HTTPS报错整理常见问题及解决方案


List,用hasNextDouble()预检金额、nextLine()配合trim()和正则校验日期,PrintWriter追加写入,BufferedReader加载时先判空再分段校验。