Java蝴蝶星号图案代码输出与预期不符,求技术排查
修复星号蝴蝶图案打印问题
你的代码输出不符合预期,核心问题有两个:
- 下半部分循环从
i=n开始,导致中间行(i=n的行)重复打印,总行数多了一行 - 打印星号时使用
"* "(星号加空格),既破坏了连续星号的图案结构,又因为中间空格的计算逻辑未匹配带空格的星号,进一步导致图案错位
修复方案一:无空格连续星号的标准蝴蝶图案
这是最常见的蝴蝶样式,调整打印内容和循环起始值即可:
public class butterflypattern { public static void Pattern(int n){ // 上半部分:从1到n行 for(int i=1; i<=n; i++){ // 打印左边i个星号 for(int j=1; j<=i; j++){ System.out.print("*"); } // 打印中间2*(n-i)个空格 for(int j=1; j<=2*(n-i); j++){ System.out.print(" "); } // 打印右边i个星号 for(int j=1; j<=i; j++){ System.out.print("*"); } System.out.println(); } // 下半部分:从n-1递减到1,避免重复中间行 for(int i=n-1; i>=1; i--){ // 打印左边i个星号 for(int j=1; j<=i; j++){ System.out.print("*"); } // 打印中间2*(n-i)个空格 for(int j=1; j<=2*(n-i); j++){ System.out.print(" "); } // 打印右边i个星号 for(int j=1; j<=i; j++){ System.out.print("*"); } System.out.println(); } } public static void main(String[] args) { Pattern(5); } }
输出效果(n=5):
* * ** ** *** *** **** **** ********** **** **** *** *** ** ** * *
修复方案二:带空格分隔的星号图案
如果你的预期是星号间带空格的样式,需要调整中间空格的数量(每个"* "占2个字符,中间空格数对应翻倍):
public class butterflypattern { public static void Pattern(int n){ for(int i=1; i<=n; i++){ for(int j=1; j<=i; j++){ System.out.print("* "); } // 调整空格数为4*(n-i),匹配带空格的星号 for(int j=1; j<=4*(n-i); j++){ System.out.print(" "); } for(int j=1; j<=i; j++){ System.out.print("* "); } System.out.println(); } // 从n-1开始递减,避免重复中间行 for(int i=n-1; i>=1; i--){ for(int j=1; j<=i; j++){ System.out.print("* "); } for(int j=1; j<=4*(n-i); j++){ System.out.print(" "); } for(int j=1; j<=i; j++){ System.out.print("* "); } System.out.println(); } } public static void main(String[] args) { Pattern(5); } }
输出效果(n=5):
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
内容的提问来源于stack exchange,提问作者Shubhjeet Paul
相关产品推荐
相关产品推荐

