Java Program to Print Diamond Character Pattern
In this program we print a diamond of letters. The top half is a pyramid that grows from A to A B C D E, and the bottom half is the same pyramid upside down.
Like every pattern program, it is built from nested loops: the outer loop picks the row, and the inner loops print what goes on that row. Java stores a char as a number, so adding to 'A' and casting back with (char) gives the following letters.
1. The Pattern
For 5 rows the program prints:
Pattern
A
A B
A B C
A B C D
A B C D E
A B C D
A B C
A B
A
2. How the Program Works
Here is what each printed line is made of when numberOfRows is 5:
| Line | Leading spaces | Printed after the spaces |
|---|---|---|
| 1 | 4 | A |
| 2 | 3 | A B |
| 3 | 2 | A B C |
| 4 | 1 | A B C D |
| 5 | 0 | A B C D E |
| 6 | 1 | A B C D |
| 7 | 2 | A B C |
| 8 | 3 | A B |
| 9 | 4 | A |
- Both parts print
numberOfRows - rowspaces and thenrowletters, starting at A, each followed by a space. - Step 1 counts
rowup from 1 tonumberOfRows, so the rows get wider. - Step 2 counts
rowdown fromnumberOfRows - 1to 1, so the rows get narrower again. It starts one row lower so the widest row is printed only once. System.out.println()moves to the next line after each row.
3. Java Program
public class Pattern16 {
public static void main(String[] args) {
int numberOfRows = 5;
// Step 1: the top half is a pyramid
for (int row = 1; row <= numberOfRows; row++) {
for (int column = 1; column <= numberOfRows - row; column++) {
System.out.print(" ");
}
for (int column = 1; column <= row; column++) {
System.out.print((char) ('A' + column - 1) + " ");
}
System.out.println();
}
// Step 2: the bottom half is a downward pyramid, without repeating the middle row
for (int row = numberOfRows - 1; row >= 1; row--) {
for (int column = 1; column <= numberOfRows - row; column++) {
System.out.print(" ");
}
for (int column = 1; column <= row; column++) {
System.out.print((char) ('A' + column - 1) + " ");
}
System.out.println();
}
}
}
Output
A
A B
A B C
A B C D
A B C D E
A B C D
A B C
A B
A
4. Print the Pattern for Any Number of Rows
To let the user choose the size of the pattern, read the number of rows with a Scanner. The loops stay the same.
import java.util.Scanner;
public class Pattern16Input {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the number of rows: ");
int numberOfRows = scanner.nextInt();
scanner.close();
// Step 1: the top half is a pyramid
for (int row = 1; row <= numberOfRows; row++) {
for (int column = 1; column <= numberOfRows - row; column++) {
System.out.print(" ");
}
for (int column = 1; column <= row; column++) {
System.out.print((char) ('A' + column - 1) + " ");
}
System.out.println();
}
// Step 2: the bottom half is a downward pyramid, without repeating the middle row
for (int row = numberOfRows - 1; row >= 1; row--) {
for (int column = 1; column <= numberOfRows - row; column++) {
System.out.print(" ");
}
for (int column = 1; column <= row; column++) {
System.out.print((char) ('A' + column - 1) + " ");
}
System.out.println();
}
}
}
Output (with sample input)
Enter the number of rows: 4 A A B A B C A B C D A B C A B A
Note: there are only 26 letters. Past Z,
(char) ('A' + 26) is [, not a letter, so keep the number of rows small enough that the pattern never needs a letter after Z.5. Summary
- The outer loop picks the row; the inner loops print the spaces and the letters for that row.
(char) ('A' + k)gives the letterkplaces after A.- Keep
numberOfRowsin a variable, so the same program can print the pattern in any size.
Related Programs
Was this tutorial helpful?