You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:24:52