Hollow Diamond Inside Square Star Pattern in Java

Beginner
⏱️ 10 min read
📚 Updated: Aug 2025
🎯 2 Code Examples
2n wide, 2n − 1 tall

What You'll Learn

You print a frame with a solid row of * on the first line and again on the last line, and mirror the rows in between so the middle row is narrowest (only the left and right border stars with a wide hollow gap).

The width is 2 * rows; the number of lines is 2 * rows - 1. This layout differs from the standalone hollow diamond outline (Program 9).

⭐ Pattern Output

When you run the program with rows = 5:

Output
**********
****  ****
***    ***
**      **
*        *
**      **
***    ***
****  ****
**********
1

Complete Java Program

Fixed rows = 5 version:

Java
public class Main {
    public static void main(String[] args) {
        int rows = 5;
        int height = 2 * rows - 1;
        int width = 2 * rows;

        for (int line = 1; line <= height; line++) {
            if (line == 1 || line == height) {
                for (int j = 1; j <= width; j++) System.out.print("*");
            } else {
                int i = (line <= rows) ? line : (2 * rows - line);
                int left = rows - i + 1;
                int gap = 2 * (i - 1);

                for (int j = 1; j <= left; j++) System.out.print("*");
                for (int j = 1; j <= gap; j++) System.out.print(" ");
                for (int j = 1; j <= left; j++) System.out.print("*");
            }
            System.out.println();
        }
    }
}

🧠 How It Works

1

Grid size

height = 2 * rows - 1 lines; width = 2 * rows characters per line (even width for the closed frame). For rows = 4 that is 7 lines × 8 columns, matching the sample output.

Dimensions
2

Top and bottom bars

When line == 1 or line == height, for (int j = 1; j <= width; j++) System.out.print("*"); draws a solid horizontal edge.

Border
3

Inner rows: left, gap, right

Else branch: int i = (line <= rows) ? line : (2 * rows - line);, int left = rows - i + 1;, int gap = 2 * (i - 1);. Three loops: left stars, gap spaces, left stars again—all via System.out.print. The hollow region grows until i == rows, then shrinks symmetrically.

Symmetry
4

Finish each line

After either the full bar or the three inner segments, System.out.println() advances to the next row. Every line is exactly width = 2 * rows characters wide before the newline.

Line break
=

Diamond in a frame

O(n²) output for n = rows (each of 2n-1 lines writes up to 2n cells), O(1) extra space. Top and bottom bars are the widest; on small screens the green preview uses horizontal scroll so all 2n columns stay readable.

2

Variation — User Input Version

Accept rows with Scanner:

Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the number of rows: ");
        int rows = sc.nextInt();

        int height = 2 * rows - 1;
        int width = 2 * rows;

        for (int line = 1; line <= height; line++) {
            if (line == 1 || line == height) {
                for (int j = 1; j <= width; j++) System.out.print("*");
            } else {
                int i = (line <= rows) ? line : (2 * rows - line);
                int left = rows - i + 1;
                int gap = 2 * (i - 1);

                for (int j = 1; j <= left; j++) System.out.print("*");
                for (int j = 1; j <= gap; j++) System.out.print(" ");
                for (int j = 1; j <= left; j++) System.out.print("*");
            }
            System.out.println();
        }

        sc.close();
    }
}

💡 Tips for Enhancement

Try These

  • Validate rows > 0 before printing
  • Print only the hollow diamond outline (Program 9) for comparison
  • Change the frame character (e.g., use #)
  • Use StringBuilder for large rows to reduce prints
  • Try making the frame hollow (border only) instead of solid top/bottom bars

Avoid

  • Using 2 * rows - 1 as width (this pattern uses 2 * rows)
  • Forgetting to mirror i for the bottom half
  • Mixing tabs and spaces (alignment breaks)
  • Forgetting newline after each line
  • Assuming user input is always valid

Key Takeaways

1

Width is 2 * rows and height is 2 * rows - 1.

2

Top and bottom lines are fully filled with stars (frame).

3

Middle lines are symmetric using mirrored i values.

4

Time complexity is O(n²) for n rows.

5

This is a different layout than the standalone hollow diamond (Program 9).

❓ Frequently Asked Questions

This classic layout uses width 2 * rows and height 2 * rows - 1 so the top and bottom can be solid horizontal bars while the inner rows close on the left and right sides.
Program 9 prints only the diamond outline with constant width 2 * rows - 1. Program 11 adds a frame-like look using width 2 * rows and solid top/bottom rows.
It’s O(n²) because there are Theta(n) lines and each prints Theta(n) characters.

Explore: All Star Patterns

Browse the full Java star pattern series.

All Patterns →
Did you know?

This pattern is a popular variation because it combines a frame-like look with a symmetric hollow diamond.

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

9 people found this page helpful