Java星号图案打印TEL呈纵向输出 如何调整为横向排列
问题根源
现有代码采用「逐字符块打印」的逻辑:先完整输出T字符的所有行,空数行后再完整输出E字符的所有行,再空数行输出L字符的所有行,三个字符自然纵向堆叠,无法实现横向并排效果。
另外原代码还存在无效逻辑:判断条件i == h永远不会触发(外层循环i的取值范围是0到h-1),多余的空行打印也会加剧字符错位。
实现思路
要实现横向并排显示,需要把循环逻辑从「按字符块遍历」改成按行遍历:
- 外层只需要一轮高度循环,每一轮对应图案的一整行
- 每一行中,依次输出T的当前行内容、固定间隔空格、E的当前行内容、固定间隔空格、L的当前行内容
- 整行内容拼接完成后再换行,遍历完所有高度行即可得到横向排列的TEL图案
修正后完整代码
public class test { public static void main(String[] args) { int h = 5; // 定义两个字符之间的间隔宽度 int charGap = 2; // 按行遍历,逐行拼接三个字符的内容 for (int i = 0; i < h; i++) { // 输出当前行的T字符 for (int j = 0; j < h; j++) { if (i == 0 || j == h / 2) { System.out.print("*"); } else { System.out.print(" "); } } // 输出T和E的间隔 for (int k = 0; k < charGap; k++) { System.out.print(" "); } // 输出当前行的E字符 for (int j = 0; j < h; j++) { if (i == 0 || i == h - 1 || i == h / 2 || j == 0) { System.out.print("*"); } else { System.out.print(" "); } } // 输出E和L的间隔 for (int k = 0; k < charGap; k++) { System.out.print(" "); } // 输出当前行的L字符 for (int j = 0; j < h; j++) { if (j == 0 || i == h - 1) { System.out.print("*"); } else { System.out.print(" "); } } // 整行输出完毕,换行 System.out.println(); } } }
运行输出效果
***** ***** * * * * * **** * * * * * ***** *****
如果需要调整字符大小、间隔宽度,只需要修改h和charGap的取值即可。
内容的提问来源于stack exchange,提问作者Siriki Lohit
相关产品推荐
相关产品推荐

