三重嵌套循环实现字母环绕图案打印问题求助
三重嵌套循环实现Z-A环绕字母图案问题
需求:使用三重嵌套循环打印字母图案,要求字母按Z→Y→X→…→A→Z→Y…的顺序环绕循环。已知输入'X'与6、'C'与4时有对应的正确输出示例。当前代码存在两个问题:
- 每行的字母数量始终一致
- 字母无法实现Z到A的环绕循环
原代码如下:
public class TriangleFive { private char letter; private int amount; public TriangleFive() { this('a',0); } public TriangleFive(char c, int amt) { letter = c; amount = amt; } public void setLetter(char c) { letter = c; } public void setAmount(int amt) { amount = amt; } public String toString() { String output=""; int count = 0; int castAscii = (int) letter - count; char ch = (char) castAscii; for(int i = 0; i< amount; i++){ // Rows for(int j = 0; j<amount -count; j++){ // Columns output += " "; for(int k =0 ; k < amount -count; k++){ // Values in Columns output += ch; } } output += "\n"; count++; } return output; } }
问题分析
- 字母环绕逻辑缺失:原代码仅简单对初始字母做减法,未处理字母小于'A'时的环绕逻辑,无法实现Z到A的循环。
- 字母数量控制错误:原代码用
amount - count同时控制列数和每列字母长度,导致每行所有列的字母数量一致,不符合图案要求的逐列递减规则。
修正后的代码
public class TriangleFive { private char letter; private int amount; public TriangleFive() { this('a', 0); } public TriangleFive(char c, int amt) { letter = Character.toUpperCase(c); // 统一转为大写,避免大小写干扰 amount = amt; } public void setLetter(char c) { letter = Character.toUpperCase(c); } public void setAmount(int amt) { amount = amt; } public String toString() { String output = ""; // 第一层循环:控制总行数,共amount行 for (int i = 0; i < amount; i++) { // 第二层循环:控制当前行的列数,每行递减1列 for (int j = 0; j < amount - i; j++) { // 计算当前列的字母偏移量:行偏移+列偏移 int offset = i + j; int charCode = (int) letter - offset; // 处理Z-A环绕:若小于'A'则加26回到Z方向 if (charCode < 'A') { charCode += 26; } char currentChar = (char) charCode; // 第三层循环:控制当前列的字母重复次数,逐列递减 for (int k = 0; k < amount - i - j; k++) { output += currentChar; } // 列间添加空格(避免行尾多余空格) if (j != amount - i - 1) { output += " "; } } // 每行结束换行 output += "\n"; } return output; } }
关键修改点
- 环绕逻辑实现:通过计算字母ASCII码,当结果小于'A'时加26,实现从A回到Z的循环,满足Z→A的环绕要求。
- 字母数量调整:第三层循环次数改为
amount - i - j,使得每一行的列数逐行递减,每一列的字母数量逐列递减,符合图案规则。 - 列间空格处理:在列之间添加分隔空格,同时避免行尾出现多余空格。
- 统一大写:将输入字母转为大写,避免大小写混合导致的ASCII码计算错误。
内容的提问来源于stack exchange,提问作者Maybe
相关产品推荐
相关产品推荐

