title: Writing a Java program to run with a pre-built interface (the Life game) but I'm having trouble
body: <p>Here's my code: <a href="http://pastebin.com/umy0FPvB" rel="nofollow">http://pastebin.com/umy0FPvB</a> (LG)</p>
  
  <p>and here's the teacher's code: <a href="http://pastebin.com/y5wU0Zpx" rel="nofollow">http://pastebin.com/y5wU0Zpx</a> (LCI)</p>
  
  <p>It's telling me I'm wrong on line 41 of the teacher's code when the LCI is trying to read from the matrix passed from the LG [world()].</p>
  
  <p>I've been sitting on this for a while but I can't seem to figure out what's wrong.</p>
  
  <pre><code>Exception in thread "main" java.lang.NullPointerException
      at Console.printWorld(Console.java:41)
      at Console.playLife(Console.java:56)
      at Console.main(Console.java:30)
  </code></pre>
  
  <p>--</p>
  
  <pre><code>/**
   * The Life game
   * @author Noah Kissinger
   * @date 2012.2.13
   */
  
  import java.util.Random;
  
  public class Life {
  
      private static boolean[][] matrix;
      private static int bL, bH, lL, lH, r, c;
      private static long rSeed;
  
      public Life(long seed, int rows, int columns, int birthLow, int birthHigh,
              int liveLow, int liveHigh) {
  
          rSeed = seed;
          bL = birthLow;
          bH = birthHigh;
          lL = liveLow;
          lH = liveHigh;
          r = rows;
          c = columns;
  
          createMatrix();
  
      }
  
      public void update() {
          updateMatrix();
      }
  
      public boolean[][] world() {
          return matrix;
      }
  
      public static void createMatrix() {
  
          Random seedBool = new Random(rSeed);
  
          boolean[][] matrix = new boolean[r][c];
  
          for (int i = 0; i &lt; matrix.length; i++) {
              for (int j = 0; j &lt; matrix[i].length; j++) {
                  matrix[i][j] = false;
              }
          }
  
          for (int i = 1; i &lt; matrix.length - 1; i++) {
              for (int j = 1; j &lt; matrix[i].length - 1; j++) {
                  matrix[i][j] = seedBool.nextBoolean();
              }
          }
  
      }
  
      public static void updateMatrix() {
  
          Random seedBool = new Random(rSeed);
  
          boolean[][] matrixCopy = matrix.clone();
          for (int i = 0; i &lt; matrix.length; i++)
              matrixCopy[i] = matrix[i].clone();
  
          int count = 0;
  
          for (int i = 1; i &lt; matrix.length - 1; i++) {
              for (int j = 1; j &lt; matrix[i].length - 1; j++) {
  
                  if (matrix[i][j] == false) {
  
                      if (matrixCopy[i - 1][j - 1] == true)
                          count++;
                      if (matrixCopy[i - 1][j] == true)
                          count++;
                      if (matrixCopy[i - 1][j + 1] == true)
                          count++;
                      if (matrixCopy[i][j - 1] == true)
                          count++;
                      if (matrixCopy[i][j + 1] == true)
                          count++;
                      if (matrixCopy[i + 1][j - 1] == true)
                          count++;
                      if (matrixCopy[i + 1][j] == true)
                          count++;
                      if (matrixCopy[i + 1][j + 1] == true)
                          count++;
  
                      if (count &gt;= bL &amp;&amp; count &lt;= bH) {
                          matrix[i][j] = true;
  
                          for (int i1 = 0; i1 &lt; matrix.length; i1++) {
                              for (int j1 = 0; j1 &lt; matrix[i1].length; j1++) {
                                  matrix[i1][j1] = false;
                              }
                          }
  
                          for (int i1 = 1; i1 &lt; matrix.length - 1; i1++) {
                              for (int j1 = 1; j1 &lt; matrix[i1].length - 1; j1++) {
                                  matrix[i1][j1] = seedBool.nextBoolean();
                              }
                          }
                      } else
                          matrix[i][j] = false;
                      count = 0;
  
                  }
  
                  else {
  
                      if (matrixCopy[i - 1][j - 1] == true)
                          count++;
                      if (matrixCopy[i - 1][j] == true)
                          count++;
                      if (matrixCopy[i - 1][j + 1] == true)
                          count++;
                      if (matrixCopy[i][j - 1] == true)
                          count++;
                      if (matrixCopy[i][j + 1] == true)
                          count++;
                      if (matrixCopy[i + 1][j - 1] == true)
                          count++;
                      if (matrixCopy[i + 1][j] == true)
                          count++;
                      if (matrixCopy[i + 1][j + 1] == true)
                          count++;
  
                      if (count &gt;= lL &amp;&amp; count &lt;= lH)
                          matrix[i][j] = true;
                      else
                          matrix[i][j] = false;
                      count = 0;
  
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p>--</p>
  
  <pre><code>/**
   * The Console class is a console interface to the Life game.
   * @author DH
   * @date Sept. 2008
   */
  
  import java.util.Scanner;
  
  
  public class Console {
  
      /**
       * @param args unused
       */
      public static void main(String[] args) {
          Scanner in = new Scanner(System.in);
          System.out.println("Please enter the size of the matrix(rows, columns) :");
          int rows = in.nextInt();
          int columns = in.nextInt();
          System.out.println("Please enter random seed: ");
          long seed = in.nextLong();
          System.out.println("Please enter birth range (low, high) :");
          int birthLow = in.nextInt();
          int birthHigh = in.nextInt();
          System.out.println("Please enter live range (low, high): ");
          int liveLow = in.nextInt();
          int liveHigh = in.nextInt();
          try {
              Life game = new Life(seed, rows, columns, birthLow, birthHigh, liveLow, liveHigh);
              playLife(game);
          } catch (IllegalArgumentException e) {
              System.out.println("Inappropriate values: " + e.getMessage());
          }
      }
  
      /**
       * Print a boolean matrix
       * @param world is a boolean matrix to be printed with # for true and - for false.
       */
      public static void printWorld(boolean[][] matrix) {
          for (int r=0; r&lt;matrix.length; r++) {
              for (int c=0; c&lt;matrix[0].length; c++) {
                  System.out.print(matrix[r][c] ? " # " : " - ");
              }
              System.out.println();
          }
          System.out.println();
  
      }
  
      /**
       * Play the game of Life starting with a given state
       * @param game is the Life object that provides the current state of Life
       */
      public static void playLife(Life game) {
          printWorld(game.world());
          for (int i=0; i&lt;10; i++) {
              game.update();
              printWorld(game.world());
          }
      }
  
  }
  </code></pre>