Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法更改二维数组中点周围元素的值_Java_Arrays_Multidimensional Array - Fatal编程技术网

Java 无法更改二维数组中点周围元素的值

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

我目前正在编写一个用java运行“扫雷者”的程序,但这一部分给了我一些问题。我试图编辑一个小的2d数组,比如:{{0,-1},{0,0};它应该把它编辑成这样的字段:{{1,-1},{1,1};但据我所知,目前没有改变任何值。基本上,我只是想在一个炸弹周围的八个单元格中加上1(值为-1),除非这个单元格本身就是一个炸弹(-1),但到目前为止还没有任何运气。我将非常感谢你能提供的任何帮助

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-1A&&B并且条件A的值为false时,B不会被计算。因此你必须在将其用作数组索引之前检查
x-1>=0
。因此你的
if
应该是
if((x-1>=0)和&(y-1>=0)和&(field[x-1][y-1]!=-1))
解决了这个问题!非常感谢您的帮助!我是一名新程序员,非常感谢您帮助我解决这些问题!