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

Java打印蝴蝶星型图案问题:输出与预期不符求修正

Java蝴蝶星型图案打印问题修正

你的代码存在三处核心问题,导致输出与预期不符,以下是问题分析和修正方案:

问题点

  1. 中间行重复打印:上半部分循环i从1到n,下半部分循环i从n到1,导致最宽的中间行被打印两次,而预期中该行仅出现一次。
  2. 缺少居中缩进:预期图案整体居中,但你的代码直接从左边缘开始打印星号,未添加左侧空格实现居中效果。
  3. 星号与空格格式不匹配:你使用"* "作为星号单元(带空格),但中间空格的计算逻辑未对应调整,导致星号组之间的空格数量不符合预期。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:15:54