2014-10-18 329 views
0

我正在嘗試遍歷二維數組並計算所有等於0的對角線鄰居,然後將當前位置設置爲等於鄰居。例如:如何檢查二維數組中的對角線鄰居並將當前值設置爲等於鄰居數

0 5 0 9 
0 5 0 3 
1 9 4 6 
7 0 0 9 

如果我使用下面的代碼更改爲

0 2 0 1 
0 3 1 2 
1 3 1 2 
0 1 1 1 

(我趕上例外,因爲將有索引越界異常的所有參數號):

int row, col, count; 
     count = 0; 
// Standard for-loop used in walking through a 2D array 
     for (row = 0; row < NUM; row++) { 
      for (col = 0; col < NUM; col++) { 
       // Check top left neighbor 
       try { 
        if (grid[row - 1][col - 1] == 0) { 
         count++; 

        } 
       } catch (IndexOutOfBoundsException e) { 

       } // Check bottom left neighbor 
       try { 
        if (grid[row - 1][col + 1] == 0) { 
         count++; 

        } 
       } catch (IndexOutOfBoundsException e) { 

       } // Check top right neighbor 
       try { 
        if (grid[row + 1][col - 1] == 0) { 
         count++; 

        } 
       } catch (IndexOutOfBoundsException e) { 

       } // Check bottom right neighbor 
       try { 
        if (grid[row + 1][col + 1] == 0) { 
         count++; 

        } 
       } catch (IndexOutOfBoundsException e) { 

       } // Set current place in the array equal to number of 0 neighbors 
       grid[row][col]=count; 
       count = 0; 

      } 

     } 

問題是我的輸出是錯誤的。取而代之的是所謂的代碼,它更改爲以下:

0 2 0 1 
0 3 1 2 
1 2 1 1 
0 0 0 0 

所以前兩行的工作,然後3號線有幾個OBO錯誤。不知道最後一行甚至有什麼問題,我不確定哪裏出錯。

摘要

原文是:

0 5 0 9 
0 5 0 3 
1 9 4 6 
7 0 0 9 

這應該更改爲:

0 2 0 1 
0 3 1 2 
1 3 1 2 
0 1 1 1 

但我發現了:

0 2 0 1 
0 3 1 2 
1 2 1 1 
0 0 0 0 

另一個例子是:

原文:

5 0 0 3 9 5 
0 0 9 5 3 0 
0 0 0 9 7 3 
7 0 5 0 9 5 
0 0 3 0 0 0 
9 5 0 3 7 0 

更新時間:

1 1 1 0 1 0 
1 2 2 1 2 0 
1 0 2 0 2 0 
2 1 4 1 4 1 
0 1 0 1 1 0 
0 2 0 1 1 0 

任何建議將非常感謝。

+1

實際問題是什麼? – 2014-10-18 20:10:16

+0

現在加入。對於那個很抱歉。 – Nilnoc 2014-10-18 20:13:01

+0

爲什麼最後一行有1個?任何對角線都沒有零。 – scanales 2014-10-18 20:22:01

回答

1

你開始

0 5 0 9 
0 5 0 3 
1 9 4 6 
7 0 0 9 

你開始從頂部遍歷左並同時修改矩陣。 SO 2行已被修改之後,中間矩陣是

0 2 0 1 
0 3 1 2 
1 9 4 6 
7 0 0 9 

現在考慮到元件的index [2][1]。在原始矩陣中,它有3 zero neighbors,但該矩陣只有2,因此預期和獲得的輸出之間存在差異。

製作一個單獨的矩陣來存儲修改後的值。

+0

啊。得到它了。這解決了這個問題。非常感謝你 – Nilnoc 2014-10-18 20:56:13