Tic Tac Toe NullPointerException

时间:2015-10-03 19:05:34

标签: java processing

好的,所以我做了tic tac toe并且在我放入checkWin()方法之前就开始了。一旦我把它放入,每次我点击一个通常放置X或O的方块时,它给了我一个错误NullPointerException。我相信它所说的代码,如果布尔2D数组" board"是假的,然后胜利发生,但也发生在我没有感叹品脱。有人可以帮忙吗?感谢。

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 个答案:

答案 0 :(得分:1)

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

每个条目都为null,您需要确保在使用之前填充...

答案 1 :(得分:1)

一个简单的解决方案是使用原始布尔值:

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

而不是布尔对象包装器(布尔)。这样,如果数组中的任何值未填充,则其默认值为默认值boolean(false),与&#34; null&#34;相比较。在布尔值的情况下(您的示例)。