Использование списка массивов целочисленных типов в качестве параметра, это рекурсивная функция.Операторы 8 if
представляют восемь окружающих позиций определенной координаты в массиве с ограничениями, не позволяющими пересечь доску.
counts [] [] - целочисленный массив, хранящий счет соседних шахт иmine
если это минная позиция.У меня глобальное целое число.Соответствующий JButton [] [], он хранит, отображает и является бэкэндом.Несмотря на это, ошибка не возникла из-за этого.
Справочная информация: В тральщике эффект домино возникает при нажатии на ячейку «ноль» (ячейка без окружающих «мин» и окружающий «ноль»'Ячейки также активируются. Очевидно, это требует рекурсии.
Ошибка, с которой я сталкивался, иногда была ошибка stackOverflow в сочетании с ArrayIndex вне пределов, но в основном только OutofBounds. Каждый прогон,' mines 'генерируются случайным образом, отсюда и отклонение ошибки. Генерация минной позиции, похоже, не выдает никакой ошибки, потому что я изменил количество мин на фиксированное число (7, если кому-то любопытно) просто для проверки, и были сгенерированы те же ошибкиОшибка была выдана в line 162
, который я выделил в приведенном ниже коде, и в том месте, где я вызывал функцию рекурсивно.
public void dominoEffect(ArrayList<Integer> toClear){
if(toClear.size() == 0)
{
return;
}
else
{
int x = toClear.get(0) / 100;
int y = toClear.get(0) % 100;
toClear.remove(0);
if(this.counts[x][y] == 0)
{
if( x > 0 && y > 0) //
{
this.buttons[x-1][y-1].setText
(this.counts[x-1][y-1]+ "");
this.buttons[x-1][y-1].setEnabled(false);
if(this.counts[x-1][y-1] == 0)
{
toClear.add((x-1) * 100 + (y-1));
}
}
if( x > 0) //
{
this.buttons[x-1][y].setText
(this.counts[x-1][y]+ "");
this.buttons[x-1][y].setEnabled(false);
if(this.counts[x-1][y] == 0)
{
toClear.add((x-1) * 100 + y);
}
}
if(x > 0 && y < this.counts.length -1 ) //
{
this.buttons[x-1][y+1].setText // line 162
(this.counts[x-1][y+1]+ "");
this.buttons[x-1][y+1].setEnabled(false);
if(this.counts[x-1][y+1] == 0)
{
toClear.add((x-1) * 100 + (y+1));
}
}
if(y > 0)
{
this.buttons[x][y-1].setText
(this.counts[x][y-1]+ "");
this.buttons[x][y-1].setEnabled(false);
if(this.counts[x][y-1] == 0)
{
toClear.add( x * 100 + (y-1));
}
}
if(y < this.counts.length -1) //
{
this.buttons[x][y+1].setText
(this.counts[x][y+1]+ "");
this.buttons[x][y+1].setEnabled(false);
if(this.counts[x][y+1] == 0)
{
toClear.add(x * 100 + (y+1));
}
}
if(x < this.counts.length-1 && y > 0) //
{
this.buttons[x+1][y-1].setText
(this.counts[x+1][y-1]+ "");
this.buttons[x+1][y-1].setEnabled(false);
if(this.counts[x+1][y-1] == 0)
{
toClear.add((x+1) * 100 + (y-1));
}
}
if(x < this.counts.length -1) //
{
this.buttons[x+1][y].setText
(this.counts[x+1][y]+ "");
this.buttons[x+1][y].setEnabled(false);
if(this.counts[x+1][y] == 0)
{
toClear.add((x+1) * 100 + y);
}
}
if(x < this.counts.length-1 && y < this.counts.length-1)
{
this.buttons[x+1][y+1].setText
(this.counts[x+1][y+1]+ "");
this.buttons[x+1][y+1].setEnabled(false);
if(this.counts[x+1][y+1] == 0)
{
toClear.add((x+1) * 100 + (y+1));
}
}
}
dominoEffect(toClear);
}
}