Java打印蝴蝶星型图案问题:输出与预期不符求修正
Java蝴蝶星型图案打印问题修正
你的代码存在三处核心问题,导致输出与预期不符,以下是问题分析和修正方案:
问题点
- 中间行重复打印:上半部分循环
i从1到n,下半部分循环i从n到1,导致最宽的中间行被打印两次,而预期中该行仅出现一次。 - 缺少居中缩进:预期图案整体居中,但你的代码直接从左边缘开始打印星号,未添加左侧空格实现居中效果。
- 星号与空格格式不匹配:你使用
"* "作为星号单元(带空格),但中间空格的计算逻辑未对应调整,导致星号组之间的空格数量不符合预期。
修正后的代码
public static void butterFly(int n) { // 上半部分:从第1行到第n行 for (int i = 1; i <= n; i++) { // 左侧缩进空格,实现图案居中 for (int j = 1; j <= n - i; j++) { System.out.print(" "); } // 左半部分连续星号 for (int j = 1; j <= i; j++) { System.out.print("*"); } // 左右星号组之间的空格 for (int j = 1; j <= 2 * (n - i); j++) { System.out.print(" "); } // 右半部分连续星号 for (int j = 1; j <= i; j++) { System.out.print("*"); } System.out.println(); } // 下半部分:从第n-1行到第1行,避免重复中间行 for (int i = n - 1; i >= 1; i--) { // 左侧缩进空格 for (int j = 1; j <= n - i; j++) { System.out.print(" "); } // 左半部分连续星号 for (int j = 1; j <= i; j++) { System.out.print("*"); } // 左右星号组之间的空格 for (int j = 1; j <= 2 * (n - i); j++) { System.out.print(" "); } // 右半部分连续星号 for (int j = 1; j <= i; j++) { System.out.print("*"); } System.out.println(); } }
关键修改说明
- 循环范围调整:下半部分循环起始值从
n改为n-1,总行数变为2n-1,中间全星行仅打印一次,匹配预期行数。 - 新增左侧缩进:每一行开头打印
n-i个空格,让星号组整体居中,和预期的左侧空格效果一致。 - 星号格式优化:将星号从带空格的
"* "改为连续的"*",同时保持中间空格为2*(n-i),确保星号组之间的空格数量符合预期。
测试输出(n=4时)
* * ** ** ****** ******** ****** ** ** * *
内容的提问来源于stack exchange,提问作者Nishant Singh
相关产品推荐
相关产品推荐

