我遇到了一个分配方法的问题,所以基本上当我使用这个方法时
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作为数组的大小,这怎么可能呢?这是完整的类文件。
答案 0 :(得分: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中,模运算结果的符号由被除数的符号决定。
答案 1 :(得分: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列 所以,如果你尝试y&lt;(6-1),你的y是4 然后,如果您尝试访问第四列,您将获得ArrayOutOfBounds异常。
希望它足够清楚。