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

Java中如何修复自定义星星金字塔打印的空格计算问题

Fixing the Space Calculation for Your Java Star Pyramid

Let's tackle this space calculation problem head-on. The core issue with your current code is that int spaces = rows; doesn't properly account for how the number of stars grows per row. To get that clean pyramid alignment, we need to base our space count on the widest row of stars (the last one) and adjust from there.

Here's What Went Wrong

When you use the current remaining rows value for spaces, you're not accounting for the fact that each row adds 2 stars. The leading spaces should shrink as the number of stars increases, so every star group lines up perfectly to form the pyramid shape.

Step-by-Step Fix

  1. First, calculate the maximum number of stars: This is the number of stars in the final row, which follows the formula 1 + 2 * (originalRows - 1) (since we start at 1 star and add 2 each iteration).
  2. Compute the correct spaces for each row: For any given row, the leading spaces for a star group should be (maxStars - currentStars) / 2. This ensures each group is centered relative to the widest row, creating that classic pyramid indentation.

Fixed Code

private static void printStars(int rows, int columns ) {
    int originalRowCount = rows; // Save the initial row count to calculate max stars
    int stars = 1;
    int maxStars = 1 + 2 * (originalRowCount - 1); // Widest row's star count
    
    while (rows > 0) {
        int spaces = (maxStars - stars) / 2; // Correct space calculation
        for (int i = 1; i <= columns; i++) {
            // Print leading spaces for the current star group
            for (int sp = spaces; sp >= 1; sp--) {
                System.out.print(" ");
            }
            // Print the stars for this group
            for (int st = stars; st >= 1; st--) {
                System.out.print("*");
            }
            // Add a space between columns to match your example formatting
            if (i < columns) {
                System.out.print(" ");
            }
        }
        System.out.println();
        stars += 2;
        rows--;
    }
}

What Changed & Why

  • originalRowCount: We store the initial number of rows because the rows variable decreases in the loop, and we need the original value to calculate maxStars once upfront.
  • maxStars: For example, if you pass rows=4, this becomes 1 + 2*(4-1) = 7 — that's the number of stars in the final row.
  • spaces: For the first row (1 star), spaces are (7-1)/2 = 3 — so each * is preceded by 3 spaces. For the second row (3 stars), spaces drop to 2, and so on until the last row has 0 spaces.
  • Column spacing: The if (i < columns) check adds a space between star groups, which matches the format of your sample outputs.

Testing the Fixed Code

If you run printStars(4,2), you'll get properly aligned output like this (spaces are visible here to show alignment):

*    *
    ***  ***
   **********
  ******* *******

Which matches the structure of your sample (the spaces are just visible now, whereas your sample omitted them for brevity).

内容的提问来源于stack exchange,提问作者Agar123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:37:38