【发布时间】:2013-03-27 02:37:37
【问题描述】:
我正在尝试为编程挑战网站编写扫雷程序,但无法检测 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 *
编辑:你们所有人都有很好的答案,但我选择了最佳答案,因为它解决了我遇到的许多其他我没有提到的问题。谢谢大家的帮助!
【问题讨论】:
-
不要将代码写出 8 次,而是写一个 Direction 枚举,其中包含您可以移入的所有单步增量。例如,Java 中的 pastebin.com/06yNW2TD
标签: java matrix multidimensional-array arrays minesweeper