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

Java实现12小时制转24小时制(HackerRank)代码问题排查

咱们来一步步排查你代码里的问题,看看为什么有些测试用例失败:

你的代码里的核心问题

  1. 字符串比较用==而非equals()
    Java中==比较的是对象引用,不是字符串内容。你最后判断12:00:00AM和12:00:00PM时,s == "xxx"永远不会返回true,因为输入字符串和字面量的内存引用不同,导致这两个特殊时间的修正逻辑完全失效。

  2. PM时间的12点处理逻辑错误
    当输入是12PM时,你的代码会把小时加12变成24,再转成0,这就把12PM错误地变成了00:xx:xx,而正确结果应该保持12不变。

  3. AM时间的12点处理不完整
    你只单独处理了12:00:00AM这个特例,但像12:30:45AM这类时间,你的代码会输出12:30:45,而正确结果应该是00:30:45,因为12AM属于午夜,需要转成00点。

  4. rest的获取方式不够健壮
    你通过固定索引循环截取字符串的方式虽然对标准输入有效,但依赖输入的固定长度,不如直接从拆分后的数组中提取分钟和秒更可靠、易读。


修正后的代码

下面是修复了所有问题的版本,逻辑更清晰且覆盖所有测试场景:

import java.io.*;
import java.util.*;

public class Solution {
    static String timeConversion(String s) {
        // 拆分时间为小时、分钟、秒+周期三部分
        String[] timeParts = s.split(":");
        int hour = Integer.parseInt(timeParts[0]);
        String minute = timeParts[1];
        // 从第三部分中拆分出秒和AM/PM标识
        String secondWithPeriod = timeParts[2];
        String second = secondWithPeriod.substring(0, 2);
        String period = secondWithPeriod.substring(2);
        
        // 处理24小时制转换逻辑
        if (period.equalsIgnoreCase("PM")) {
            // PM时:12PM保持12,其他小时加12
            if (hour != 12) {
                hour += 12;
            }
        } else {
            // AM时:12AM转为0,其他小时保持不变
            if (hour == 12) {
                hour = 0;
            }
        }
        
        // 格式化小时为两位数字(自动补0)
        String militaryHour = String.format("%02d", hour);
        
        // 拼接最终结果
        return militaryHour + ":" + minute + ":" + second;
    }

    private static final Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        String s = scan.nextLine();
        String result = timeConversion(s);
        System.out.println(result);
    }
}

关键修改点说明

  • 直接从拆分后的数组提取分钟、秒和周期,避免固定索引的脆弱性;
  • 重新梳理了AM/PM转换逻辑:
    • PM场景:仅非12点的小时加12,12PM保持12;
    • AM场景:仅12点转为0,其他AM小时原样保留;
  • 用String.format("%02d", hour)自动格式化小时为两位数字,无需手动判断拼接;
  • 用equalsIgnoreCase()判断周期,兼容大小写输入(更健壮);
  • 移除了无效的字符串==比较,新逻辑已覆盖所有12点的特殊情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:02:47