Java Tic Tac Toe零点异常

Java Tic Tac Toe零点异常,java,processing,Java,Processing,好的,我正在做tic-tac-toe,在我使用checkWin()方法之前,它的开头非常棒。一旦我把它放进去,每次我点击一个通常放X或O的方块,它就会给我一个错误NullPointerException。我相信它说的代码,如果布尔2D数组“board”为false,那么就会赢,但当我没有感叹号品脱时也会赢。有人能帮忙吗?谢谢 public Boolean[][] board= new Boolean[3][3]; public boolean xTurn = true; public void

好的,我正在做tic-tac-toe,在我使用checkWin()方法之前,它的开头非常棒。一旦我把它放进去,每次我点击一个通常放X或O的方块,它就会给我一个错误NullPointerException。我相信它说的代码,如果布尔2D数组“board”为false,那么就会赢,但当我没有感叹号品脱时也会赢。有人能帮忙吗?谢谢

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);
  }
}
public Boolean[]board=new Boolean[3][3];
公共布尔值xtorn=true;
公共作废设置(){
尺寸(900900);
背景(255);
冲程重量(2);
线(300,0,300,900);
线(600,0,600,900);
行(0、300、900、300);
行(0、600、900、600);
}
公众抽签(){
}
公共无效鼠标单击(){
如果(xtrn){
xtorn();
}
如果(!xtorn){
oTurn();
}
}
公共空间{
if(mouseX>0&&mouseX<300&&mouseY>0&&mouseY<300&&board[0][0]==null){
冲程(255,0,0);
行(5025025050);
行(250、250、50、50);
板[0][0]=真;
xtrn=false;
checkWin();
}
否则如果(mouseX>300&&mouseX<600&&mouseY>0&&mouseY<300&&board[0][1]==null){
冲程(255,0,0);
线路(350、250、550、50);
线路(550、250、350、50);
板[0][1]=真;
xtrn=false;
checkWin();
}
否则,如果(mouseX>600&&mouseX<900&&mouseY>0&&mouseY<300&&board[0][2]==null){
冲程(255,0,0);
线路(650、50、850、250);
线路(650、250、850、50);
板[0][2]=真;
xtrn=false;
checkWin();
}
否则如果(mouseX>0&&mouseX<300&&mouseY>300&&mouseY<600&&board[1][0]==null){
冲程(255,0,0);
线路(50550250350);
线路(250、550、50、350);
董事会[1][0]=正确;
xtrn=false;
checkWin();
}
否则如果(mouseX>300&&mouseX<600&&mouseY>300&&mouseY<600&&board[1][1]==null){
冲程(255,0,0);
线路(350550550350);
线路(550550350350);
董事会[1][1]=正确;
xtrn=false;
checkWin();
}
否则,如果(mouseX>600&&mouseX<900&&mouseY>300&&mouseY<600&&board[1][2]==null){
冲程(255,0,0);
线路(650、350、850、550);
线路(650、550、850、350);
董事会[1][2]=正确;
xtrn=false;
checkWin();
}
否则如果(mouseX>0&&mouseX<300&&mouseY>600&&mouseY<900&&board[2][0]==null){
冲程(255,0,0);
线路(50850、250650);
线路(250850、50650);
董事会[2][0]=正确;
xtrn=false;
checkWin();
}
否则如果(mouseX>300&&mouseX<600&&mouseY>600&&mouseY<900&&board[2][1]==null){
冲程(255,0,0);
线路(350、850、550、650);
线路(550、850、350、650);
董事会[2][1]=正确;
xtrn=false;
checkWin();
}
else if(mouseX>600&&mouseX<900&&mouseY>600&&mouseY<900&&board[2][2]==null){
冲程(255,0,0);
线路(650、650、850、850);
线路(650、850、850、650);
董事会[2][2]=正确;
xtrn=false;
checkWin();
}
}
公开作废{
if(mouseX>0&&mouseX<300&&mouseY>0&&mouseY<300&&board[0][0]==null){
笔划(0,0,255);
椭圆(150150200200);
单板[0][0]=假;
xtrn=真;
checkWin();
}
否则如果(mouseX>300&&mouseX<600&&mouseY>0&&mouseY<300&&board[0][1]==null){
笔划(0,0,255);
椭圆(450150200200);
董事会[0][1]=虚假;
xtrn=真;
checkWin();
}
否则,如果(mouseX>600&&mouseX<900&&mouseY>0&&mouseY<300&&board[0][2]==null){
笔划(0,0,255);
椭圆(750150200200);
董事会[0][2]=虚假;
xtrn=真;
checkWin();
}
否则如果(mouseX>0&&mouseX<300&&mouseY>300&&mouseY<600&&board[1][0]==null){
笔划(0,0,255);
椭圆(150450200200);
董事会[1][0]=虚假;
xtrn=真;
checkWin();
}
否则如果(mouseX>300&&mouseX<600&&mouseY>300&&mouseY<600&&board[1][1]==null){
笔划(0,0,255);
椭圆(450450200200);
董事会[1][1]=虚假;
xtrn=真;
checkWin();
}
否则,如果(mouseX>600&&mouseX<900&&mouseY>300&&mouseY<600&&board[1][2]==null){
笔划(0,0,255);
椭圆(750450200200);
董事会[1][2]=虚假;
xtrn=真;
checkWin();
}
否则如果(mouseX>0&&mouseX<300&&mouseY>600&&mouseY<900&&board[2][0]==null){
笔划(0,0,255);
椭圆(150750200200);
董事会[2][0]=虚假;
xtrn=真;
checkWin();
}
否则如果(mouseX>300&&mouseX<600&&mouseY>600&&mouseY<900&&board[2][1]==null){
笔划(0,0,255);
椭圆(450750200200);
董事会[2][1]=虚假;
xtrn=真;
checkWin();
}
else if(mouseX>600&&mouseX<900&&mouseY>600&&mouseY<900&&board[2][2]==null){
笔划(0,0,255);
椭圆(750750200200);
董事会[2][2]=虚假;
xtrn=真;
checkWin();
}
}
公共void checkWin(){
如果(!board[0][0]&&&!board[0][1]&&&!board[0][2]){
笔划(0,255,0);
线路(100150800150);
}
}

每个条目都是空的。在使用之前,您需要确保其已填充…

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

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

而不是布尔的对象包装器(布尔)。这样,如果数组中的任何值未填充,它的默认值将是布尔值的默认值(false),而布尔值的默认值为“null”(您的示例)

checkWin()方法位于最底部,其他的都很好。请阅读我给你的第二个链接中的“问题:我如何阅读NPE stacktrace?”。如果你真的懒得自己阅读堆栈跟踪(=错误消息),至少在你的问题中提供它。
public boolean[][] board= new boolean[3][3];