2016-06-13 60 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

非常感謝!完美工作。祝你好運! –