Java 无法更改二维数组中点周围元素的值
我目前正在编写一个用java运行“扫雷者”的程序,但这一部分给了我一些问题。我试图编辑一个小的2d数组,比如:{{0,-1},{0,0};它应该把它编辑成这样的字段:{{1,-1},{1,1};但据我所知,目前没有改变任何值。基本上,我只是想在一个炸弹周围的八个单元格中加上1(值为-1),除非这个单元格本身就是一个炸弹(-1),但到目前为止还没有任何运气。我将非常感谢你能提供的任何帮助Java 无法更改二维数组中点周围元素的值,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我目前正在编写一个用java运行“扫雷者”的程序,但这一部分给了我一些问题。我试图编辑一个小的2d数组,比如:{{0,-1},{0,0};它应该把它编辑成这样的字段:{{1,-1},{1,1};但据我所知,目前没有改变任何值。基本上,我只是想在一个炸弹周围的八个单元格中加上1(值为-1),除非这个单元格本身就是一个炸弹(-1),但到目前为止还没有任何运气。我将非常感谢你能提供的任何帮助 public static void setHint(int[][] field) { for (in
public static void setHint(int[][] field)
{
for (int x=0; x < field.length - 1; x++) {
for (int y=0; y < field[0].length - 1; y++) {
if (field[x][y] == -1) {
if (field[x-1][y-1] != -1) {
field[x-1][y-1] += 1;
}
if (field[x-1][y+1] != -1) {
field[x-1][y+1] += 1;
}
if (field[x+1][y-1] != -1) {
field[x+1][y-1] += 1;
}
if (field[x+1][y+1] != -1) {
field[x+1][y+1] += 1;
}
if (field[x-1][y] != -1) {
field[x-1][y] += 1;
}
if (field[x+1][y] != -1) {
field[x+1][y] += 1;
}
if (field[x][y-1] != -1) {
field[x][y-1] += 1;
}
if (field[x-1][y-1] != -1) {
field[x-1][y-1] += 1;
}
}
}
}
}
publicstaticvoidsethint(int[][]字段)
{
对于(int x=0;x
字段。长度为2。因此,条件x
仅适用于x=0
。对于y
也一样。因此,您只计算字段(0,0)
。由于字段[0][0]
的值为0,因此if条件为false,因此不执行任何操作
因此,可以从更改循环的结束条件开始:
for (int x=0; x < field.length; x++) {
for (int y=0; y < field[0].length; y++) {
for(int x=0;x
您还必须验证是否在矩阵外进行测试。当x=0时,检查字段[x-1][y]将导致IndexOutOfBoundException,这将适用于侧面的所有字段(其中x=0,x=length-1,y=0,y=length-1)这就是我假设的出错之处,我回去编辑了它,以便它能够处理该问题以及IndexOutOfBoundException,但现在我仍然无法绕过IndexOutOfBoundException。我将每个if语句更改为如下所示:if((字段[x-1][y-1]!=-1)&&(x-1>=0)&(y-1>=0)&&(x-1
A&&B
并且条件A的值为false时,B不会被计算。因此你必须在将其用作数组索引之前检查x-1>=0
。因此你的if
应该是if((x-1>=0)和&(y-1>=0)和&(field[x-1][y-1]!=-1))
解决了这个问题!非常感谢您的帮助!我是一名新程序员,非常感谢您帮助我解决这些问题!