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

Java生成5x5网格数字时钟图案 多数字并排打印问题求助

问题根因

你当前的实现是把单个数字的所有行(带换行符)直接拼接,所以会先打印完第一个数字的全部5行,再打印第二个数字的全部5行,自然是上下堆叠,无法并排展示。

修复思路

  • 调整数字、冒号的存储结构:从完整的带换行的字符串,改成String[5]数组,每个下标对应数字的第i行内容
  • 按行拼接输出:遍历0~4行,依次把所有要展示的元素(小时两位、冒号、分钟两位)的当前行用1个空格拼接,最后把5行用换行符连起来就是最终结果

修改后可运行代码

import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class DigitalClock {
    // 预存所有数字的5行内容,每个数字对应长度为5的字符串数组
    private static final String[][] NUM_DIGITS = new String[10][5];
    // 预存冒号的5行内容
    private static final String[] COLON_DIGITS = new String[5];

    static {
        // 初始化数字模板
        String top = "#####";
        String left = "#    ";
        String right = "    #";
        String both = "#   #";
        String mid = "#####";
        String empty = "     ";

        NUM_DIGITS[0] = new String[]{top, both, both, both, top};
        NUM_DIGITS[1] = new String[]{right, right, right, right, right};
        NUM_DIGITS[2] = new String[]{top, right, mid, left, top};
        NUM_DIGITS[3] = new String[]{top, right, mid, right, top};
        NUM_DIGITS[4] = new String[]{both, both, mid, right, right};
        NUM_DIGITS[5] = new String[]{top, left, mid, right, top};
        NUM_DIGITS[6] = new String[]{top, left, mid, both, top};
        NUM_DIGITS[7] = new String[]{top, right, right, right, right};
        NUM_DIGITS[8] = new String[]{top, both, mid, both, top};
        NUM_DIGITS[9] = new String[]{top, both, mid, right, right};

        // 初始化冒号模板:第二行和第四行是中间带#,其余行空
        COLON_DIGITS[0] = empty;
        COLON_DIGITS[1] = "  #  ";
        COLON_DIGITS[2] = empty;
        COLON_DIGITS[3] = "  #  ";
        COLON_DIGITS[4] = empty;
    }

    public static void main(String[] args) {
        // 示例1输入 72:34
        System.out.println(renderClock("72:34"));
        System.out.println();
        // 示例2输入 56:78
        System.out.println(renderClock("56:78"));
    }

    private static String renderClock(String timeStr) {
        // 解析时间得到5个展示元素:小时1、小时2、冒号、分钟1、分钟2
        String[][] elements = new String[5][];
        elements[0] = NUM_DIGITS[timeStr.charAt(0) - '0'];
        elements[1] = NUM_DIGITS[timeStr.charAt(1) - '0'];
        elements[2] = COLON_DIGITS;
        elements[3] = NUM_DIGITS[timeStr.charAt(3) - '0'];
        elements[4] = NUM_DIGITS[timeStr.charAt(4) - '0'];

        // 按行拼接
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < elements.length; j++) {
                sb.append(elements[j][i]);
                // 元素之间加1个空格,最后一个元素后面不加
                if (j != elements.length - 1) {
                    sb.append(" ");
                }
            }
            if (i != 4) {
                sb.append("\n");
            }
        }
        return sb.toString();
    }

    private static String repeat(String input, int times) {
        return IntStream.range(0, times).mapToObj(i -> input).collect(Collectors.joining(""));
    }
}

运行效果

输入72:34输出完全匹配示例1,输入56:78输出完全匹配示例2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:27:04