Search code examples
javaarraysalgorithmpascals-triangle

Pascal's triangle in Java


Java beginner here! As part of practicing programming, I've run into Pascal's triangle. I tried to implement a solution where the triangle is printed like so:

1
1 1 
1 2 1
1 3 3 1 
1 4 6 4 1
...

So roughly right-sided. My solution though runs into multiple errors, and although I would appreciate help with that, I would primarily like to know if I am thinking correctly with my solution. (For some functions I am using a custom library)

public static void main(String[] args) {
    int input = readInt("Enter triangle size, n = ");
    array = new int[input][input];

    for (int i = 0; i < input; i++) { // rows
        for (int j = 0; j < i + 1; j++) { // columns
            if (i = 0) {
                array[i][0] = 1;
            } else if (i != 0 && i == j) {
                array[i][j] = 1;
            } else {
                array[i][j] = array[i - 1][j] + array[i - 1][j - 1];
            }
        }
    }
    // print out only the lower triangle of the matrix
    for (int i = 0; i < input; i++) {
        for (int j = 0; j < input; j++) {
            if (i <= j) {
                System.out.println("%d ", array[i][j]);
            }
        }
    }
}

Solution

  • You were on the right track. Here's how I implemented it:

    Scanner sc = new Scanner(System.in);
    System.out.print("Enter triangle size, n = ");
    int n = sc.nextInt();
    sc.close();
    //This will be a jagged array
    int[][] array = new int[n][0];
    
    for (int i = 0; i < n; i++) {
      //Add the next level (it's empty at the start)
      array[i] = new int[i + 1];
      for (int j = 0; j <= i; j++) {
        //At the ends, it's just 1
        if (j == 0 || j == i) {
          array[i][j] = 1;
        } else { //The middle
          array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
        }
      }
    }
    
    for (int i = 0; i < n; i ++) {
      for (int j = 0; j <= i; j++) {
        //printf is what you use to do formatting
        System.out.printf("%d ", array[i][j]);
      }
      //Without this, everything's on the same line
      System.out.println();
    }
    

    Your else part was correct, but you didn't check if j equaled 0 before that. Instead of setting the current element to 1 when i was 0 or when i equaled j, you should have done it when j was 0 or when i equaled j. Because of this mistake, in later rows where i was not 0, but j was, you tried to access array[i - 1][j - 1], which was basically array[i - 1][-1], causing an IndexOutOfBoundsException.

    I also made a jagged array instead of an even matrix because it made more sense that way, but it shouldn't matter much.

    Also, this wasn't an error, but you did else if (i!=0 && i==j) The i != 0 part is unnecessary because you checked previously if i == 0.

    Link to repl.it