2014-12-03 56 views
-1

我有一個分配與方法麻煩時,獲得索引越界的錯誤,所以基本上,當我用這個方法使用%操作

public class DFS { 

private int[][] a; 

public DFS(int[][] a){ 
    this.a=a; 
} 
/** 
* Recursively visits all vertices in matrix 
* @param x 
* @param y 
*/ 
public void search(int x, int y){ 
    if(a[x][y] == -1){ 
     return; 
    } 
    else{ 
     a[x][y] = -1; 
     System.out.println((char)(x+65)+", "+(char)(y+65)); 
     if(x<a.length-1){ 
      if(a[x+1][y] == 1){ 
       search(x+1, y); 
      } 
     } 
     else{ 
      if(a[(x+1)%a.length][y] == 1){ 
       search((x+1)%a.length, y); 
      } 
     } 
     if(y<a.length-1){ 
      if(a[x][y+1] == 1){ 
       search(x, y+1); 
      } 
     } 
     else{ 
      if(a[x][(y+1)%a.length] == 1){ 
       search(x, (y+1)%a.length); 
      } 
     } 
     if(x>0){ 
      if(a[x-1][y] == 1){ 
       search(x-1, y); 
      } 
     } 
     else{ 
      if(a[(x-1)%a.length][y] == 1){ 
       search((x-1)%a.length, y); 
      } 
     } 
     if(y>0){ 
      if(a[x][y-1] == 1){ 
       search(x, y-1); 
      } 
     } 
     else{ 
      if(a[x][(y-1)%a.length] == 1){ 
       search(x, (y-1)%a.length); 
      } 
     } 

    } 
} 

}

我不斷收到ArrayIndexOutOfBounds錯誤,但如果我使用n作爲數組大小的模數,這怎麼可能?這是完整的類文件。

+2

有很多情況下,你不使用模量。沒有足夠的這裏來完全診斷你的問題。拋出什麼異常? – Greg 2014-12-03 02:58:52

+0

在第50,31和56行,但我不需要模數的變量沒有被遞增正確的?如果他們不增加 – Bioman20 2014-12-03 03:00:33

+2

,他們如何超出範圍請發佈完整的堆棧跟蹤並告訴我們哪些線路導致了錯誤。不要只給行號,而是告訴我們哪行是那些行號。另外,請告訴我們錯誤期間數組的大小以及傳入的值。最後,我建議使用這樣的代碼調試器 – 2014-12-03 03:01:27

回答

1

如果我打電話給你的類,如下所示:

new DFS(new int[5][5], 5).search(0, 4); 

我得到這一行一負x指數:

if (a[(x - 1) % a.length][y] == 1) 

(0 - 1) % 5結果是-1,因此ArrayIndexOutOfBoundsException。在Java中,模運算結果的標誌由股息的符號決定。

+0

我認爲-1%5會是4,但是這就是最新的錯誤。謝謝! – Bioman20 2014-12-03 03:32:05

0
public class Demo { 
    public static void main(String[] args) { 
     int a[][]=new int[5][6]; 
     System.out.println(a.length); 
    } 
} 

這裏則爲a.length會給你5

,但在你的代碼中去充分DERP試圖

if(y<a.length-1){ 
    if(a[x][y+1] == 1){ 

看到這裏你比較Y,它使用的行號作爲你的列號。

讓我們試試看圖

| _ | _ | _ |

| _ | _ | _ |

| _ | _ | _ |

| _ | _ | _ |

| _ | _ | _ |

| _ | _ | _ |

在這裏,我們有6行3列 因此,如果您嘗試Ÿ<(6-1)和你的y是4 那麼如果您嘗試訪問的第四列,你會得到一個ArrayOutOfBounds異常。

希望已經夠清楚了。

+0

矩陣在另一個類中被初始化爲一個方形數組,具體像這樣int [] [] adjMatrix = new int [n] [n]; – Bioman20 2014-12-03 03:19:56

+0

ArrayOutOfBounds讓您嘗試訪問數組外部的某個點,所以如果您在某個點上有4 x 4平方,您嘗試訪問x> = 4或y> = 4的方形點或x <0或y <0 – 2014-12-03 03:27:21