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

Java实现DAMPAC字母图案横向输出问题求助

Java字母图案DAMPAC横向输出解决方案

核心问题原因

你当前代码纵向输出的本质原因是:你先完整打印了D的全部7行,再打印A的全部7行,后续字母同理,所有字母是上下堆叠的关系。要实现横向排列,需要按行统一输出:每一行依次输出6个字母对应行的图案内容,全部输出完当前行再换行。

修改后可运行代码

public class LetterPattern_DAMPAC {
    // 定义统一的行数,所有字母统一适配7行高度
    private static final int TOTAL_ROWS = 7;

    // 获取指定字母第row行的字符串内容
    private static String getRowOfD(int row) {
        StringBuilder sb = new StringBuilder();
        for (int patternD2=0; patternD2<4; patternD2++) {
            if (patternD2==0 || patternD2==row+1 || row+patternD2==7 || row*patternD2==9) {
                sb.append(" D");
            } else {
                sb.append("  ");
            }
        }
        // 字母间加间隔避免粘连
        sb.append("  ");
        return sb.toString();
    }

    private static String getRowOfA(int row) {
        StringBuilder sb = new StringBuilder();
        for (int patternA2=7; patternA2>row; patternA2--) {
            sb.append(" ");
        }
        for (int patternA3=0; patternA3<=row; patternA3++) {
            if (row==4 || patternA3==0 || patternA3==row) {
                sb.append(" A");
            } else {
                sb.append("  ");
            }
        }
        sb.append("  ");
        return sb.toString();
    }

    private static String getRowOfM(int row) {
        StringBuilder sb = new StringBuilder();
        // 原M图案只有6行,第6行补空对齐整体高度
        if (row >= 6) {
            sb.append("              ");
            sb.append("  ");
            return sb.toString();
        }
        for (int patternM2=0; patternM2<7; patternM2++) {
            if (patternM2==0 || patternM2==6 || (row==patternM2 || row+patternM2==6) && row<4) {
                sb.append("M ");
            } else {
                sb.append("  ");
            }
        }
        sb.append("  ");
        return sb.toString();
    }

    private static String getRowOfP(int row) {
        StringBuilder sb = new StringBuilder();
        for (int patternP2=0; patternP2<3; patternP2++) {
            if (patternP2==0 || patternP2==row+1 || row+patternP2==4) {
                sb.append("P ");
            } else {
                sb.append(" ");
            }
        }
        sb.append("  ");
        return sb.toString();
    }

    private static String getRowOfC(int row) {
        StringBuilder sb = new StringBuilder();
        for (int patternC2 = 0; patternC2<7; patternC2++) {
            if (((row==6 || row==0) && patternC2>0) || (row<6 && row>0 && patternC2<1)) {
                sb.append(" C");
            } else {
                sb.append(" ");
            }
        }
        sb.append("  ");
        return sb.toString();
    }

    public static void main (String[] args) {
        // 按行遍历,每行依次拼接所有字母的对应行
        for (int row = 0; row < TOTAL_ROWS; row++) {
            System.out.print(getRowOfD(row));
            System.out.print(getRowOfA(row));
            System.out.print(getRowOfM(row));
            System.out.print(getRowOfP(row));
            System.out.print(getRowOfA(row));
            System.out.print(getRowOfC(row));
            // 整行拼接完再换行
            System.out.println();
        }
    }
}

逻辑说明

  • 我们把每个字母的行生成逻辑封装成独立方法,每次调用直接返回对应字母某一行的完整字符串,不需要在生成的时候换行
  • 主函数只控制行号,每一行依次把6个字母的当前行字符串拼接起来输出,最后统一换行,就能实现字母横向排列
  • 你提到的括号逻辑问题:原来代码里的括号是用来控制逻辑运算优先级的,&&的运算优先级高于||,如果不把需要组合判断的条件用括号括起来,会出现逻辑判断顺序错误,导致图案渲染异常,你原来的括号写法是正确的,不需要修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:27:03