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

如何用Java实现自适应尺寸的姓名首字母图案打印程序?

动态生成首字母图案的Java实现方案

核心思路

针对每个首字母定义基于尺寸参数的动态填充规则,用二维数组存储每个位置的字符,最后将两个字母的数组横向拼接输出,确保不同尺寸下字母辨识度一致。以下以首字母JP为例实现完整逻辑。

完整实现代码

public class Array2Iniciales {
    public static void inicialesletras(int size, char fillChar) {
        // 确保尺寸至少为3,避免图案变形
        if (size < 3) {
            size = 3;
        }

        // 初始化两个二维数组,默认填充空格
        char[][] letraJ = new char[size][size];
        char[][] letraP = new char[size][size];
        initializeArray(letraJ);
        initializeArray(letraP);

        // 填充字母J的图案
        fillLetraJ(letraJ, size, fillChar);
        // 填充字母P的图案
        fillLetraP(letraP, size, fillChar);

        // 拼接并打印两个字母
        printInitials(letraJ, letraP, size);
    }

    // 初始化数组为空格
    private static void initializeArray(char[][] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                array[i][j] = ' ';
            }
        }
    }

    // 填充字母J的规则
    private static void fillLetraJ(char[][] jArray, int size, char fillChar) {
        // 第一行全填充
        for (int col = 0; col < size; col++) {
            jArray[0][col] = fillChar;
        }
        // 最后一行:从第2列到倒数第2列填充(索引1到size-2)
        for (int col = 1; col < size - 1; col++) {
            jArray[size - 1][col] = fillChar;
        }
        // 中间列(倒数第2列):从第2行到倒数第2行填充
        int middleCol = size - 2;
        for (int row = 1; row < size - 1; row++) {
            jArray[row][middleCol] = fillChar;
        }
    }

    // 填充字母P的规则
    private static void fillLetraP(char[][] pArray, int size, char fillChar) {
        // 左列全填充
        for (int row = 0; row < size; row++) {
            pArray[row][0] = fillChar;
        }
        // 第一行全填充
        for (int col = 0; col < size; col++) {
            pArray[0][col] = fillChar;
        }
        // 中间行的右列:从第2行到倒数第2行填充
        for (int row = 1; row < size - 1; row++) {
            pArray[row][size - 1] = fillChar;
        }
    }

    // 拼接打印两个首字母
    private static void printInitials(char[][] j, char[][] p, int size) {
        for (int row = 0; row < size; row++) {
            // 打印J的当前行
            for (char c : j[row]) {
                System.out.print(c);
            }
            // 加一个空格分隔两个字母
            System.out.print(" ");
            // 打印P的当前行
            for (char c : p[row]) {
                System.out.print(c);
            }
            System.out.println();
        }
    }

    // 测试示例
    public static void main(String[] args) {
        // 测试尺寸为5,填充字符*
        inicialesletras(5, '*');
        System.out.println("\n---");
        // 测试尺寸为7,填充字符#
        inicialesletras(7, '#');
    }
}

关键逻辑说明

  1. 数组初始化:先将所有位置设为空格,确保未填充区域显示空白,避免乱码。
  2. 字母填充规则:
    • J:第一行全满,底部中间段填充,右侧竖线从顶部下方延伸到底部上方,贴合J的轮廓。
    • P:左侧竖线全满,顶部横线全满,右侧竖线从顶部下方延伸到倒数第二行,贴合P的轮廓。
  3. 尺寸兼容性:通过动态计算索引(如size-1、size-2),确保任意≥3的尺寸下,字母比例和辨识度一致。
  4. 拼接打印:逐行拼接两个字母的数组,每行之间加空格分隔,保证排版整齐。

测试输出示例

尺寸为5时的输出:

***** *****
    *     *
    *     *
    *     *
 ****      

尺寸为7时的输出:

####### #######
      #       #
      #       #
      #       #
      #       #
      #       
 ######       

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:34:58