I am creating a mine sweeper program in java for school, and am having trouble with the clearing of squares that don't have any mines next to them, the square is supposed to be disabled, and all surrounding squares revealed, if there is another square that is touching no bombs, it will perform the same operation. I am getting a stack overflow error, I know this has to do with an infinite loop, but I can't find where it is getting stuck in my code.
I have no idea what's going wrong so any suggestions would be helpful.
Here is the relative piece of code (the if statements are for special cases, if the square clicked is on the edge of the board)
private void doClear(int y, int x, JButton[][] bArray2, int gridy,int gridx)
{
clicked--;
bArray2[y][x].setBackground(lighterGray);
bArray2[y][x].setEnabled(false);
if (x > 0 && x<gridx-1 && y> 0 && y<gridy-1)
{
clearSquare(y-1, x-1,gridy, gridx, bArray2);
clearSquare(y-1, x,gridy, gridx, bArray2);
clearSquare(y-1, x+1,gridy, gridx, bArray2);
clearSquare(y, x-1,gridy, gridx, bArray2);
clearSquare(y, x+1,gridy, gridx, bArray2);
clearSquare(y+1, x-1,gridy, gridx, bArray2);
clearSquare(y+1, x,gridy, gridx, bArray2);
clearSquare(y+1, x+1,gridy, gridx, bArray2);
}
if(y == 0 && x != 0 && x != gridx-1) // top row check
{
clearSquare(y, x-1,gridy, gridx, bArray2);
clearSquare(y, x+1,gridy, gridx, bArray2);
clearSquare(y+1, x-1,gridy, gridx, bArray2);
clearSquare(y+1, x,gridy, gridx, bArray2);
clearSquare(y+1, x+1,gridy, gridx, bArray2);
} // ends top row check
if (y == 0 && x == 0) // corner check top left
{
clearSquare(y, x+1,gridy, gridx, bArray2);
clearSquare(y+1, x,gridy, gridx, bArray2);
clearSquare(y+1, x+1,gridy, gridx, bArray2);
} // ends top left corner check
if (y == 0 && x == gridx-1) // corner check top right row
{
clearSquare(y, x-1,gridy, gridx, bArray2);
clearSquare(y+1, x-1,gridy, gridx, bArray2);
clearSquare(y+1, x,gridy, gridx, bArray2);
} // ends top right corner check
if (x == 0 && y != 0 && y != gridy-1) //left column check
{
clearSquare(y-1, x,gridy, gridx, bArray2);
clearSquare(y-1, x+1,gridy, gridx, bArray2);
clearSquare(y, x+1,gridy, gridx, bArray2);
clearSquare(y+1, x,gridy, gridx, bArray2);
clearSquare(y+1, x+1,gridy, gridx, bArray2);
} // ends left column check
if (x == gridx-1 && y != 0 && y != gridy-1) // right column check
{
clearSquare(y-1, x-1,gridy, gridx, bArray2);
clearSquare(y-1, x,gridy, gridx, bArray2);
clearSquare(y, x-1,gridy, gridx, bArray2);
clearSquare(y+1, x-1,gridy, gridx, bArray2);
clearSquare(y+1, x,gridy, gridx, bArray2);
}// ends right column check
if(y == gridy-1 && x != 0 && x != gridx-1)
{
clearSquare(y-1, x-1,gridy, gridx, bArray2);
clearSquare(y-1, x,gridy, gridx, bArray2);
clearSquare(y-1, x+1,gridy, gridx, bArray2);
clearSquare(y, x-1,gridy, gridx, bArray2);
clearSquare(y, x+1,gridy, gridx, bArray2);
} // ends bottom row check
if (y == gridy-1 && x == 0) // left bottom corner check
{
clearSquare(y-1, x,gridy, gridx, bArray2);
clearSquare(y-1, x+1,gridy, gridx, bArray2);
clearSquare(y, x+1,gridy, gridx, bArray2);
} // ends left bottom corner check
if (y == gridy-1 && x == gridx-1) // right bottom corner check
{
clearSquare(y-1, x-1,gridy, gridx, bArray2);
clearSquare(y-1, x,gridy, gridx, bArray2);
clearSquare(y, x-1,gridy, gridx, bArray2);
}//ends right bottom corner check
}
private void clearSquare(int y,int x, int gridy, int gridx, JButton[][] bArray2)
{
int value = array[y][x];
System.out.println(value);
String text = bArray2[y][x].getText();
if (text == "")
{
if (value == 0)
{
doClear(y, x, bArray2, gridy, gridx);
}
else{
clicked--;
bArray2[y][x].setText(""+value);
}
}
}