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

在Java中如何实现控制台版留言板_Java基础项目解析

风芳酱_5982

风芳酱_5982

发布时间:2026-02-22 11:45:12

|

755人浏览过

|

来源于php中文网

原创

用Scanner读输入、ArrayList存留言实现增删查:新增校验空内容,删除时序号减1转换,遍历用增强for;退出前用UTF-8编码文件保存,Scanner需全局共享避免重复创建。

在java中如何实现控制台版留言板_java基础项目解析

如何用 Scanner + ArrayList 实现留言增删查

控制台留言板本质是内存中的数据管理,不需要数据库。核心就是用 ArrayList<string></string> 存留言,配合 Scanner 读用户输入。别一上来就搞文件持久化或 Swing 界面,先跑通基本流程。

常见错误:直接用 System.in.read() 读字符串,结果只拿到第一个字符;或者用 next() 而不是 nextLine(),导致换行符残留、后续输入跳过。

  • 始终用 scanner.nextLine() 读整行输入(包括空格和中文)
  • 新增留言时,建议对内容做基础校验:if (content.trim().isEmpty()) 跳过空提交
  • 删除按序号操作时,注意 list.remove(index) 的索引从 0 开始,但显示给用户时通常从 1 开始,记得减 1
  • 遍历输出用增强 for 循环即可,不需要手写 for (int i = 0; i —— 容易越界

为什么不能用 String[] 而必须用 ArrayList

留言数量不确定,String[] 初始化后长度固定。每次新增都要新建数组、复制元素,效率低且代码臃肿。而 ArrayList 内部自动扩容,接口简洁。

典型翻车场景:声明 String[] messages = new String[5];,填满后用户再发第 6 条,程序直接抛 ArrayIndexOutOfBoundsException,而不是友好提示“已满”。

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

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载
  • ArrayList 的 add() 和 remove() 时间复杂度平均 O(1),足够应付百条以内留言
  • 如果真要限制最大条数,用 if (list.size() >= MAX_SIZE) 判断,比手动管理数组下标清晰得多
  • 别为了“省事”用静态数组 + 全局计数器变量,容易在多处修改时不同步

如何让退出前自动保存到本地文件

纯控制台程序关闭即丢数据,用户会抱怨“刚写的留言没了”。用 FileWriter + BufferedWriter 在退出前 dump 到 messages.txt 即可,不用上 ObjectOutputStream 序列化。

关键陷阱:路径没写对、没关流、中文乱码。Windows 默认编码是 GBK,但 IDE(如 IntelliJ)常设 UTF-8,不指定编码会写成乱码。

  • 保存时强制指定编码:new OutputStreamWriter(new FileOutputStream("messages.txt"), "UTF-8")
  • 务必在 finally 块或 try-with-resources 中关闭 BufferedWriter,否则可能内容没真正写入磁盘
  • 启动时若文件存在,用 Files.readAllLines(Paths.get("messages.txt"), StandardCharsets.UTF_8) 加载,比手动逐行读更安全
  • 不要在每次增删都实时写文件——IO 操作慢,且频繁写可能被杀毒软件拦截

怎样避免 main 方法里堆满 if-else 分支逻辑

把菜单选择、功能执行拆成独立方法,比如 showMenu()、handleAdd()、handleList()。main 只负责循环调用和分发,否则 200 行全挤在一块,改个提示语都怕牵出 bug。

另一个常见混乱点:把 Scanner 创建放在方法内部,导致多次 new Scanner(System.in) —— 第二次调用会报 IllegalStateException: Scanner closed。

  • Scanner 必须作为类成员变量或传参共享,不能每个方法都 new 一个
  • 菜单循环用 while (true) + break 最直白,别硬套 do-while 或状态机
  • 输入非数字时,scanner.hasNextInt() 要配合 scanner.next() 清掉非法 token,否则会无限卡在同一次输入

最易忽略的是输入缓冲区残留:比如用户输完“3”想删除,回车后 nextLine() 立刻返回空字符串。这不是 bug,是 nextInt() 不吃换行符的正常行为。要么统一用 nextLine() 后 parse,要么每次 nextInt() 后跟一句 scanner.nextLine() 吸掉回车。

热门AI工具

更多
墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

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

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

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

DeepSeek

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

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

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

6959

2023.08.02

while的用法
while的用法

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

354

2023.09.25

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

14646

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1725

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

4057

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

6221

2024.03.01

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

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

3040

2025.10.15

java break和continue
java break和continue

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

827

2025.10.24

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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