質問: 0) { btn[i][w].setContentAreaFilled(false); label[i][w].setVisible(true); } } } } ```
回答: コードでは何もない場所P1に隣接したセルP2を開けたらそこも「何もない」ときP2を新たな基準と考えてその周りの8セルを開けるというのがうまく表現できていないと思います。 この例の場合は再帰アルゴリズムを使うと素直にやりたいことが表現できる気がします。 ``` void openCell(int x, int y) { if (x < 0 || w >= width || y < 0 || y >= height) //範囲外の時は何もしない return; if (isOpened(x, y)) //既に開かれていたら何もしない return; if (isBomb(x, y)) throw new BombException("残念でした"); if (getCellNumber(x, y) == 0) { // まわりに爆弾が一つもなかったら・・・ for (int ny = y - 1; ny <= y + 1; ny++) { for (int nx = x - 1; nx <= x + 1; nx++) { openCell(nx, ny); // 再帰呼び出し } } } } ``` 追記:肝心の再帰呼び出しのところの引数が間違ってたので訂正しました。