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

Java 24小时计时器(秒表)程序小时数不递增问题排查求助

24小时计时器小时不递增的问题修复

兄弟,你的代码里有好几处逻辑bug直接导致小时数无法递增,我给你逐个拆解问题,再给你修正后的代码:

核心错误点分析

  • 小时递增的条件完全无效:你写的if(temp==60&&sec==60)永远不会触发。原因是temp = min是在sec++之前执行的,当sec到60触发min++时,temp还是之前的min值(比如59),而且sec到60后立刻被重置为0,这个条件永远为false,小时自然不会加。
  • 分钟重置逻辑错误:if(min==59) { min=0; }会让分钟刚到59就直接清0,根本等不到升到60触发小时进位,完全违背时间进位逻辑。
  • 小时停止/重置逻辑混乱:原代码里if(hrs==24||hrs==12)的判断逻辑混乱,hrs==25的条件永远触发不了(因为hrs最多到24),导致计时器无法正常停止。

修正后的完整代码

public class Real {
    public static void Th() {
        int hrs = 0, min = 0, sec = 0;
        try {
            Thread t = Thread.currentThread();
            System.out.println("						*****Timer*******");
            System.out.println("HOURS:MINUTES:SECONDS");
            
            // 24小时计时器,循环到小时数达到24时停止
            while (hrs < 24) {
                // ASCII清屏符,保持输出在同一位置刷新
                System.out.println("						*****Timer*******");
                System.out.println("HOURS:MINUTES:SECONDS");
                // 格式化输出,补零让时间显示更规范(比如02:05:08)
                System.out.printf("%02d	%02d	%02d%n", hrs, min, sec);
                
                t.sleep(1000); // 暂停1秒,模拟秒表走时
                sec++;
                
                // 秒进位逻辑:秒到60,分钟+1,秒重置为0
                if (sec == 60) {
                    min++;
                    sec = 0;
                    
                    // 分钟进位逻辑:分钟到60,小时+1,分钟重置为0
                    if (min == 60) {
                        hrs++;
                        min = 0;
                    }
                }
            }
            // 计时器结束提示
            System.out.println("						*****Timer Finished*******");
        } catch (InterruptedException e) {
            System.out.println("THREAD INTERRUPTED");
        }
    }

    // 补充main方法,否则程序无法运行
    public static void main(String[] args) {
        Th();
    }
}

关键修改说明

  1. 移除无效的temp变量:用嵌套的进位判断替代(秒→分→小时),逻辑更清晰直接,避免临时变量导致的逻辑混乱。
  2. 删除错误的分钟重置逻辑:让分钟可以正常升到60,触发小时递增。
  3. 重构循环终止条件:直接用hrs < 24作为循环条件,符合24小时计时器的需求,逻辑直观易懂。
  4. 格式化时间输出:用printf补零,让时间显示更符合日常计时器的样式。
  5. 补充main方法:原代码缺少入口方法,导致无法运行,这里补上让你直接就能测试。

可选扩展(如果需要12小时制显示)

如果想要改成12小时制显示(比如12:59:59之后显示01:00:00),不需要修改计时逻辑,只需要调整输出部分:

// 替换原输出语句为以下代码
int displayHrs = hrs % 12;
displayHrs = displayHrs == 0 ? 12 : displayHrs; // 0点显示为12
System.out.printf("%02d	%02d	%02d%n", displayHrs, min, sec);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:38:11