1

Ok so I'm making tic tac toe and it started out great before I put in the checkWin() method. Once I put that in, every time I click on a square which normally put an X or O, it gave me an error NullPointerException. I believe in the code it says if the Boolean 2D array "board" is false then the win happens but it also happens when I don't have the exclamation pints. Can someone please help? Thanks.

public Boolean[][] board= new Boolean[3][3];
public boolean xTurn = true;

public void setup() {
  size(900, 900);
  background(255);
  strokeWeight(2);
  line(300, 0, 300, 900);
  line(600, 0, 600, 900);
  line(0, 300, 900, 300);
  line(0, 600, 900, 600);
}

public void draw() {

}

public void mouseClicked() {
  if (xTurn) {
    xTurn();
  }
  else if (!xTurn) {
    oTurn();
  }
}

public void xTurn() {
  if (mouseX > 0 && mouseX < 300 && mouseY > 0 && mouseY < 300 && board[0][0] == null) {
    stroke(255, 0, 0);
    line(50, 250, 250, 50);
    line(250, 250, 50, 50);
    board[0][0] = true;
    xTurn = false;
    checkWin();
  }
  else if (mouseX > 300 && mouseX < 600 && mouseY > 0 && mouseY < 300 && board[0][1] == null) {
    stroke(255, 0, 0);
    line(350, 250, 550, 50);
    line(550, 250, 350, 50);
    board[0][1] = true;
    xTurn = false;
    checkWin();
  }
  else if (mouseX > 600 && mouseX < 900 && mouseY > 0 && mouseY < 300 && board[0][2] == null) {
    stroke(255, 0, 0);
    line(650, 50, 850, 250);
    line(650, 250, 850, 50);
    board[0][2] = true;
    xTurn = false;
    checkWin();
  }
  else if (mouseX > 0 && mouseX < 300 && mouseY > 300 && mouseY < 600 && board[1][0] == null) {
    stroke(255, 0, 0);
    line(50, 550, 250, 350);
    line(250, 550, 50, 350);
    board[1][0] = true;
    xTurn = false;
    checkWin();
  }
  else if (mouseX > 300 && mouseX < 600 && mouseY > 300 && mouseY < 600 && board[1][1] == null) {
    stroke(255, 0, 0);
    line(350, 550, 550, 350);
    line(550, 550, 350, 350);
    board[1][1] = true;
    xTurn = false;
    checkWin();
  }
  else if (mouseX > 600 && mouseX < 900 && mouseY > 300 && mouseY < 600 && board[1][2] == null) {
    stroke(255, 0, 0);
    line(650, 350, 850, 550);
    line(650, 550, 850, 350);
    board[1][2] = true;
    xTurn = false;
    checkWin();
  }
  else if (mouseX > 0 && mouseX < 300 && mouseY > 600 && mouseY < 900 && board[2][0] == null) {
    stroke(255, 0, 0);
    line(50, 850, 250, 650);
    line(250, 850, 50, 650);
    board[2][0] = true;    
    xTurn = false;
    checkWin();
  }
  else if (mouseX > 300 && mouseX < 600 && mouseY > 600 && mouseY < 900 && board[2][1] == null) {
    stroke(255, 0, 0);
    line(350, 850, 550, 650);
    line(550, 850, 350, 650);
    board[2][1] = true;
    xTurn = false;
    checkWin();
  }
  else if (mouseX > 600 && mouseX < 900 && mouseY > 600 && mouseY < 900 && board[2][2] == null) {
    stroke(255, 0, 0);
    line(650, 650, 850, 850);
    line(650, 850, 850, 650);
    board[2][2] = true;
    xTurn = false;
    checkWin();
  }
}

public void oTurn() {
  if (mouseX > 0 && mouseX < 300 && mouseY > 0 && mouseY < 300 && board[0][0] == null) {
     stroke(0, 0, 255);
     ellipse(150, 150, 200, 200);
     board[0][0] = false;
     xTurn = true;
     checkWin();
  }
  else if (mouseX > 300 && mouseX < 600 && mouseY > 0 && mouseY < 300 && board[0][1] == null) {
     stroke(0, 0, 255);
     ellipse(450, 150, 200, 200);
     board[0][1] = false;
     xTurn = true;
     checkWin();
  }
  else if (mouseX > 600 && mouseX < 900 && mouseY > 0 && mouseY < 300 && board[0][2] == null) {
     stroke(0, 0, 255);
     ellipse(750, 150, 200, 200);
     board[0][2] = false;
     xTurn = true;
     checkWin();
  }
  else if (mouseX > 0 && mouseX < 300 && mouseY > 300 && mouseY < 600 && board[1][0] == null) {
    stroke(0, 0, 255);
     ellipse(150, 450, 200, 200);
     board[1][0] = false;
     xTurn = true;
     checkWin();
  }
  else if (mouseX > 300 && mouseX < 600 && mouseY > 300 && mouseY < 600 && board[1][1] == null) {
    stroke(0, 0, 255);
     ellipse(450, 450, 200, 200);
     board[1][1] = false;
     xTurn = true;
     checkWin();
  }
  else if (mouseX > 600 && mouseX < 900 && mouseY > 300 && mouseY < 600 && board[1][2] == null) {
    stroke(0, 0, 255);
     ellipse(750, 450, 200, 200);
     board[1][2] = false;
     xTurn = true;
     checkWin();
  }
  else if (mouseX > 0 && mouseX < 300 && mouseY > 600 && mouseY < 900 && board[2][0] == null) {
    stroke(0, 0, 255);
     ellipse(150, 750, 200, 200);
     board[2][0] = false;
     xTurn = true;
     checkWin();
  }
  else if (mouseX > 300 && mouseX < 600 && mouseY > 600 && mouseY < 900 && board[2][1] == null) {
    stroke(0, 0, 255);
     ellipse(450, 750, 200, 200);
     board[2][1] = false;
     xTurn = true;
     checkWin();
  }
  else if (mouseX > 600 && mouseX < 900 && mouseY > 600 && mouseY < 900 && board[2][2] == null) {
    stroke(0, 0, 255);
     ellipse(750, 750, 200, 200);
     board[2][2] = false;
     xTurn = true;
     checkWin();
  }
}

public void checkWin() {
  if (!board[0][0] && !board[0][1] && !board[0][2]) {
    stroke(0, 255, 0);
    line(100, 150, 800, 150);
  }
}

2 Answers2

1
 public Boolean[][] board= new Boolean[3][3];

every entry is null you need to be sure its populated before you use...

Petter Friberg
  • 21,252
  • 9
  • 60
  • 109
1

A simple solution would be to use a primitive boolean:

public boolean[][] board= new boolean[3][3];

instead of boolean's object wrapper(Boolean). This way if any value in array is unpopulated, it's default value with be the default value of boolean(false), compared to "null" in case of Boolean (your example).

Meriton Husaj
  • 239
  • 3
  • 9