2016-06-13 61 views
0

我正在开发扫雷游戏,每件事情都很好,直到昨天早晨:我遇到了一个我自己无法解决的问题。 的情况是这样的:我有2二维数组,在一个我已经产生扫雷场产生的所有值,其中9手段轰炸,并0表示自由空间。我们称之为字段。它是一个整数数组。基本上它是9x9领域。它具有+1行作为适当的代码工作框架。否则,在运行下面列出的代码时,它会返回OutOfBoundsError。 实施例:Java-在使用多维阵列时返回不正确的值

00000000000 0 
00000019100 1 
01110011100 2 
02910000000 3 
09321110000 4 
02911910000 5 
01111111110 6 
01110112910 7 
02920192110 8 
02920111000 9 
01110000000 10 
00000000000 11 

我的第二阵列是字符串数组user_field并且它是空白的(所有null字段被替换为.),这里通过输入用户的命令将打开.字段。

........... 1 
........... 2 
........... 3 
........... 4 
........... 5 
........... 6 
........... 7 
........... 8 
........... 9 
........... 10 
........... 11 
........... 12 

它必须输出我开始上所有0从,和身边的所有值。例如:

nnn 1 
n0n 2 
nnn 3 

我使用此代码来调用它:

 for (int i = 1; i < field_h-2; i++) { 
      for (int j = 1; j < field_w-2; j++) { 
       if (user_field[i][j]==null) { 
        user_field[i][j]="."; 
       } 
       if(field[i][j]==0) { 
        for(int k = 0; k< 3; k++) { 
         for (int n = 0; n< 3; n++) { 
          user_field[i-1+k][j-1+n] = String.valueOf(field[i-1+k][j-1+n]); 
          //System.out.print(String.valueOf(field[i-1+k][j-1+n])); 
         } 
        } 
       } 
       System.out.print(user_field[i][j]); 
      } 
      System.out.println(" "+ (i)); 
     } 

但在现实中,它输出(ñ -means值,X -means什么都没有。):

xxx 1 
x0n 2 
nnn 3 

我对此没有任何想法。有人能帮助我吗?我在Java中并不是很有经验,也许我不明白。

+0

如果您提供[mcve],帮助您会更容易。 –

+0

此外,它不清楚你的评论意味着什么 - 但你可以编辑你的文章,如果它不说你想要它... –

回答

0

我会解释只考虑第二行(即x0n)的问题,但我的推理自然适用于上一行和下一行。

你的程序做这个:

  1. 本来user_fieldxxx,并且fieldn0n(让我们说这是102)。

  2. 你看看field的第一个元素。它是1,因此它不是0,所以您不要对user_field进行任何更改。然后你立即打印user_field的第一个元素,该元素在当时仍然是x。所以到目前为止,你打印x

  3. 您将移至field的第二个元素。它是零,所以你更新user_field的第一和第三个元素。但是,在那个时候你已经打印了user_field的第一个元素。现在field102,user_field102,但您已经打印x。现在您打印第二个元素user_field,所以最终打印x0

  4. 您将转到field的第三个元素。这不是0,所以你没有改变。您打印user_field的第三个元素,此时为2,因此您最终打印x02,而所需的输出为102

要修复它,请将您的循环分成两部分。在第一个循环计算user_field,并在第二个循环打印它。沿线的东西:

for (int i = 1; i < field_h-2; i++) { 
     for (int j = 1; j < field_w-2; j++) { 
      if (user_field[i][j]==null) { 
       user_field[i][j]="."; 
      } 
      if(field[i][j]==0) { 
       for(int k = 0; k< 3; k++) { 
        for (int n = 0; n< 3; n++) { 
         user_field[i-1+k][j-1+n] = String.valueOf(field[i-1+k][j-1+n]); 
         //System.out.print(String.valueOf(field[i-1+k][j-1+n])); 
        } 
       } 
      } 
     } 
    } 

    for (int i = 1; i < field_h-2; i++) { 
     for (int j = 1; j < field_w-2; j++) { 
      System.out.print(user_field[i][j]); 
     } 
     System.out.println(" "+ (i)); 
    } 
+0

非常感谢!完美工作。祝你好运! –