如何实现空心正方形图案底部单词反转效果?
问题分析
你的代码存在两个核心问题:
- 循环逻辑错误,在顶部和循环末尾都重复添加了原单词,导致输出多了一行原单词,反转字符串被挤到最后。
- 中间行的字符索引取值不符合预期,没有正确匹配原单词首尾对称的字符。
修改后的代码
public static String pattern(String str) { // 使用StringBuilder提升字符串拼接效率 StringBuilder result = new StringBuilder(); int length = str.length(); // 添加顶部的原单词 result.append(str).append("\n"); // 生成中间的空心行:循环length-1次,对应首尾对称的字符 for (int i = 0; i < length - 1; i++) { char leftChar = str.charAt(i); char rightChar = str.charAt(length - 1 - i); result.append(leftChar).append(" ").append(rightChar).append("\n"); } // 添加底部的反转单词 result.append(reverse(str)); return result.toString(); } public static String reverse(String str) { StringBuilder reversed = new StringBuilder(); for (int i = str.length() - 1; i >= 0; i--) { reversed.append(str.charAt(i)); } return reversed.toString(); }
修改说明
- 调整结构逻辑:
- 单独添加顶部的原单词,不再通过循环判断重复添加。
- 循环生成
length-1行中间空心内容,每行取原单词第i位和倒数第i+1位的字符,保证对称的空心效果。 - 最后直接添加反转后的单词作为正方形底部,符合需求。
- 优化性能:将
String直接拼接替换为StringBuilder,避免频繁创建字符串对象,提升代码运行效率。 - 修正反转方法:同样用
StringBuilder优化反转逻辑,比原有的substring拼接更简洁高效。
测试输入"CompSci"时,输出将符合预期:
CompSci
C i
o c
m S
p p
S m
c o
icSpmoC
(注:若你预期中间行的字符对应有特殊调整,可根据实际需求修改循环中leftChar和rightChar的索引取值)
内容的提问来源于stack exchange,提问作者Maybe
相关产品推荐
相关产品推荐

