Pascal's triangle positioning

Noob picture Noob · Sep 22, 2013 · Viewed 9.8k times · Source

I made a Java program that prints out a pascal triangle, however I can't figure out how to correctly position it.

Program 1

public class Triangle {
    public static void main() {
        System.out.println("\nTriangle: ");
        int row = 11;
        long[][] triangle = new long[row][row];
        triangle[1][1] = 1;
        System.out.print(triangle[1][1] + "\n");

        for (int i = 2; i < row; i++) {
            for (int n = 1; n < row; n++) {
                triangle[i][n] = triangle[i-1][n-1] + triangle[i-1][n];
                if (triangle[i][n] > 0) {
                    System.out.print(triangle[i][n] + " ");
                }
            }
            System.out.println();
        }
    }
}

Output:

1
1 1 
1 2 1 
1 3 3 1 

Program 2

public class Triangle {
    public static void main() {
        System.out.println("\nTriangle: ");
        int row = 11;
        long[][] triangle = new long[row][row];
        int x = 1;
        while (x < row - 1) {
            System.out.print(" ");
            x++;
        }
        triangle[1][1] = 1;
        System.out.print(triangle[1][1] + "\n");

        for (int i = 2; i < row; i++) {
            x = i;
            while (x < row - 1) {
                System.out.print(" ");
                x++;
            }
            for (int n = 1; n < row; n++) {
                triangle[i][n] = triangle[i-1][n-1] + triangle[i-1][n];
                if (triangle[i][n] > 0) {
                    System.out.print(triangle[i][n] + " ");
                }
            }
            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 //(Notice this line is incorrectly positioned)

When the triangle approaches multiple digit numbers, it starts to break down and makes it ugly. Can someone explain how I can display a normal triangle instead of this ugly one?

Answer

Morteza Zakeri picture Morteza Zakeri · Dec 2, 2014

Dynamic Pascal Triangle generator is here:

import java.io.IOException;
import java.util.Scanner;

public class Main {
    static double fact(int n) {
        double result = 1;
        for (double i = 1; i <= n; i++)
            result *= i;
        return result;
    }

    static double combine(int n, int r) {
        return ((fact(n)) / (fact(n - r) * fact(r)));
    }

    static void pascalTriangle(int n) {
        int n2 = n;
        for (int i = 0; i < n; i++) {
            for (int space = 8 * (n2 - 1); space >= 0; space--) {
                System.out.printf(" ");
            }
            for (int j = 0; j <= i; j++) {
                System.out.printf("%14.0f", combine(i, j));
                System.out.printf("  ");
            }
            System.out.println();
            n2--;
        }
    }

    public static void main(String[] args)
            throws IOException, InterruptedException {
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);

        System.out.print("Enter Number of Lines(n): ");
        int n = sc.nextInt();
        pascalTriangle(n);
        System.out.println("Press any key to exit! ");
        sc.nextByte();
    }
}