私は掃除機の空のセルを明らかにするアルゴリズムを理解できません。 revealCellsは、セルを取って、周囲のセルをチェックし、それが鉱山のセルを見つけるまで表示しますが、何らかの理由でarrayindexoutofbounds例外が発生し続けます。セルは、ボード内のセルの2D配列です。私はすべての状態をチェックしていないことを知っている、私は残りの部分を追加する前に、それがまったく動作するかどうかをテストする必要があった。私は掃除機の再帰アルゴリズムを理解することができません
驚くことではありませんpublic void revealCells(Cell cell){
row = cell.getRow();
column = cell.getCol();
if (row < 0 || row > cells.length - 1|| column < 0 || column > cells.length - 1) return;
else if(cell instanceof MineCell) return;
else if(cell.getMineCount() == 0 && !(cell.isRevealed())){
cell.reveal();
revealCells(cells[row+1][column]);
revealCells(cells[row][column+1]);
revealCells(cells[row-1][column]);
revealCells(cells[row][column-1]);
revealCells(cells[row+1][column+1]);
revealCells(cells[row-1][column-1]);
}
else{
return;
}
}
'cells'は、2次元配列であるが、それは正方形であります、すなわち同じ幅と高さですか?そうでなければ、なぜ 'cells.length - 1'と同じ値に対して' row'と 'column'の両方をチェックしていますか? ---サイドノート:6つの再帰呼び出ししかありませんが、8つの隣接セルがあります。 – Andreas
あなたの最初の状態を見てください.1つの場所でセル[0] .length-1であってはいけません。 –