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(); } }
关键修改说明
- 移除无效的temp变量:用嵌套的进位判断替代(秒→分→小时),逻辑更清晰直接,避免临时变量导致的逻辑混乱。
- 删除错误的分钟重置逻辑:让分钟可以正常升到60,触发小时递增。
- 重构循环终止条件:直接用
hrs < 24作为循环条件,符合24小时计时器的需求,逻辑直观易懂。 - 格式化时间输出:用
printf补零,让时间显示更符合日常计时器的样式。 - 补充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
相关产品推荐
相关产品推荐

