You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现终端字符定时显示后删除,开发Simon Says游戏

解决方案

核心思路

要实现字符显示固定时长后删除,需要解决三个关键点:

  • 不换行输出字符,避免后续退格操作受换行影响
  • 使用控制台转义字符实现退格并清除字符
  • 处理线程休眠的异常,确保流程稳定

修改后的代码片段

public static void gameStart() {
    repeat.level++; // 初始为0,每次游戏开始递增
    StringBuilder sb = new StringBuilder();
    sb.ensureCapacity(100); // 计划支持100关
    Random rnd = new Random(); // 把Random实例移到循环外,提升随机性和性能
    
    for (int i = 0; i < repeat.level; i++) {
        char c = (char) ('a' + rnd.nextInt(26)); // 生成随机a-z字符
        sb.append(c); // 存入StringBuilder
        
        // 1. 不换行输出字符,确保光标在字符后
        System.out.print(c);
        // 2. 强制刷新输出缓冲区,让字符立刻显示在控制台
        System.out.flush();
        
        try {
            // 3. 等待指定时长(这里是600毫秒,可根据需求调整)
            Thread.sleep(600);
        } catch (InterruptedException e) {
            // 捕获中断异常,恢复线程中断状态
            Thread.currentThread().interrupt();
            return; // 中断后直接结束方法
        }
        
        // 4. 退格并清除字符:\b是退格符,先回到字符前,输出空格覆盖,再退格回到原位置
        System.out.print("\b \b");
        // 再次刷新缓冲区,确保清除操作生效
        System.out.flush();
    }
    
    // 验证StringBuilder内容(可保留用于调试)
    System.out.println("\n" + sb);
}

关键细节说明

  • 不换行输出:用System.out.print(c)替代println,避免每次输出后光标跳到下一行,确保退格操作能定位到当前字符。
  • 输出缓冲区刷新:System.out.flush()强制把缓冲区内容输出到控制台,否则字符可能会延迟显示,影响定时效果。
  • 退格清除逻辑:"\b \b"的作用是:
    1. \b:将光标移动到当前字符的左侧
    2. 空格:覆盖掉原来的字符
    3. \b:将光标再次移动到空格左侧,为下一个字符的输出做好准备
  • 线程休眠异常处理:Thread.sleep()会抛出InterruptedException,捕获后恢复线程的中断状态并退出方法,避免程序出现异常行为。

内容的提问来源于stack exchange,提问作者Lmar Momand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:47:08