プログラミングチャレンジのWebサイト用にマインスイーパプログラムを作成しようとしていますが、2D配列の特定の要素がマインであるかどうかを検出し、周囲の領域をインクリメントするのに問題があります。これは、配列の隅にある地雷をチェックし、周囲の領域をインクリメントする私のコードです
public void constructPointers(){
int counter = 0;
for(int i = 0; i<row;i++){
for(int j = 0;j<colm;j++){
if(minefield[i][j].equals("*")){
if(i == 0 && j == 0){
int val = Integer.parseInt(minefield[i+1][j]);
val++;
minefield[i+1][j] = "" + val;
val = Integer.parseInt(minefield[i][j+1]);
val++;
minefield[i][j+1] = "" + val;
val = Integer.parseInt(minefield[i+1][j+1]);
val++;
minefield[i+1][j+1] = "" + val;
}
if(i == minefield.length -1 && j == 0){
int val = Integer.parseInt(minefield[i-1][j]);
val++;
minefield[i-1][j] = "" + val;
val = Integer.parseInt(minefield[i][j+1]);
val++;
minefield[i][j+1] = "" + val;
val = Integer.parseInt(minefield[i-1][j+1]);
val++;
minefield[i-1][j+1] = "" + val;
}
if(i == 0 && j == minefield[i].length - 1){
int val = Integer.parseInt(minefield[i+1][j]);
val++;
minefield[i+1][j] = "" + val;
val = Integer.parseInt(minefield[i][j-1]);
val++;
minefield[i][j-1] = "" + val;
val = Integer.parseInt(minefield[i+1][j-1]);
val++;
minefield[i+1][j-1] = "" + val;
}
if(i == minefield.length - 1 && j == minefield[i].length -1){
int val = Integer.parseInt(minefield[i-1][j-1]);
val++;
minefield[i-1][j-1] = "" + val;
val = Integer.parseInt(minefield[i-1][j]);
val++;
minefield[i-1][j] = "" + val;
val = Integer.parseInt(minefield[i][j-1]);
val++;
minefield[i][j-1] = "" + val;
}
if(i == 0){
int val = Integer.parseInt(minefield[i+1][j]);
val++;
minefield[i+1][j] = "" + val;
val = Integer.parseInt(minefield[i][j+1]);
val++;
minefield[i][j+1] = "" + val;
val = Integer.parseInt(minefield[i+1][j+1]);
val++;
minefield[i+1][j+1] = "" + val;
}
}
入力した場合:
*.*
...
*.*
このコードは次のように出力します。
* 2 *
2 4 2
* 2 *
私の質問は、コードを取得して隣接する地雷を「スキップ」し、周囲の領域をインクリメントするにはどうすればよいですか?入力した場合
*.*
*..
*.*
出力したい:
* 3 *
* 5 2
* 3 *
編集:あなた方全員は素晴らしい答えを持っていました、しかしそれが私が私が言及しなかった他の多くの問題を解決したので私は一番上の答えを選びました。よろしくお願いします!