好吧,我有這個函數,需要使用遞歸,在用戶的座標(i,j)爲零的情況下,在mineswepper(int [] [] m)中搜索。零意味着該地區附近沒有地雷。如果它是零,那麼我的函數應該在一個區域範圍內顯示這個零和圍繞這個初始零點的零點。這必須以遞歸的方式進行,找到所有的零。如何在這個函數中正確使用遞歸?
我的int [] [] v是我的視覺矩陣,它用於爲所有位置分別給出和狀態(1 =>您可以顯示位置,0 =>保留?),所以當我全部打印在矩陣m中,我們只能看到在矩陣v中具有1的位置。發現零2
2-。搜索四處打聽其他零,直到有沒有更多的零發現
? ? ? ?
? ? ? ?
? ? 0 ?
? ? ? ?
? ? ? ?
它會是什麼樣子在視覺矩陣V
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 0
0 0 0 0
? ? ? ?
? ? ? ?
? ? 0 ?
? ? ? 0
? ? ? ?
它會是什麼樣子在視覺矩陣V
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 1
0 0 0 0
public void zeros(int[][]m, int[][]v, int j, int i){
v[i][j] = 1;
for(int a = Math.max(0, i-1); a < Math.min(5,i+2); a++){
for(int b = Math.max(0,j-1); b < Math.min(5,j+2); b++){
if(m[a][b] == 0){
i = a;
j = b;
zeros(m, v, i, j);}
}
}
}
fors將搜索給定的i和j周圍的所有位置。
它顯示了我的錯誤,線程「主」java.lang.StackOverflowError異常。 我不明白爲什麼。也許有人可以提供一種方法來實現遞歸,或者告訴我我的錯誤。
請證明你已經嘗試過以及它失敗了。 – codethulhu
您有一個5x4的矩陣,所以索引從一個方向從0到4,在另一個方向從0到3。也許錯誤是你正在使用一個索引5,這是超出你的矩陣。 –
@angel_navarro不,OP得到一個'StackOverflowError',而不是'ArrayIndexOutOfBoundsException'。 –