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

