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
相关产品推荐
相关产品推荐

