I have a small assignment where I have to use a 2d array to produce Pascal’s triangle. Here is my code, and it works. There is an extra credit opportunity if I display the triangle like so:
However, my spacing is not formatted like that. it simply displays the numbers all lined up on the left. its hard to describe but if you run it you will see what I mean.
Here is my code:
public class Pascal { public static final int ROW = 16; public static void main(String[] args) { int[][] pascal = new int[ROW + 1][]; pascal[1] = new int[1 + 2]; pascal[1][1] = 1; for (int i = 2; i <= ROW; i++) { pascal[i] = new int[i + 2]; for (int j = 1; j < pascal[i].length - 1; j++) { pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j]; } } for (int i = 1; i <= ROW; i++) { for (int j = 1; j < pascal[i].length - 1; j++) { System.out.print(pascal[i][j] + " "); } System.out.println(); } } }
If someone could help me figure out how to add the correct spacing to my program to produce the output desired in the picture, that would be great. I know I need to put a System.out.print(" ")
somewhere. I just dont know where.
Advertisement
Answer
Here I had modified your code, it prints wonderfully for ROW size till 13, because of the limitation of my console window:
import java.util.*; public class Pascal { public static final int ROW = 12; private static int max = 0; public static void main(String[] args) { int[][] pascal = new int[ROW + 1][]; pascal[1] = new int[1 + 2]; pascal[1][1] = 1; for (int i = 2; i <= ROW; i++) { pascal[i] = new int[i + 2]; for (int j = 1; j < pascal[i].length - 1; j++) { pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j]; String str = Integer.toString(pascal[i][j]); int len = str.length(); if (len > max) max = len; } } for (int i = 1; i <= ROW; i++) { for (int k = ROW; k > i; k--) System.out.format("%-" + max + "s", " "); for (int j = 1; j < pascal[i].length - 1; j++) System.out.format("%-" + (max + max) + "s", pascal[i][j]); System.out.println(); } } }
Output:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1