试图弄清楚如何检查潜在的数组元素是否超出范围

时间:2016-03-01 03:54:29

标签: java multidimensional-array

我正在尝试找到可以放置在NxN 2D阵列中任何位置的特定元素(数字0)的邻居。如果0位于中心,这不会是一个问题,但如果它位于顶部/底部行,例如,它将没有高于/低于它的值,并且与最左/右相同,角落案件。应该注意的是,我只需要检查与其直接水平/垂直的值,而不是对角线。是否有可以调用特定方法来确定特定索引是否存在?

3 个答案:

答案 0 :(得分:2)

您可以从数组的长度派生该信息。

给定一个二维数组array[m][n],您可以在其中考虑表示行的第一个维度,以及表示列的第二个维度:

array[0][whatever] // top row
array[m-1][whatever] // bottom row
array[whatever][0] // left-most column
array[whatever][n-1] // right-most column

应用此(格式化以便于阅读):

Object current = array[i][j];

Object left =   j > 0       ? array[i][j-1] : null;
Object right =  j < (n - 1) ? array[i][j+1] : null;
Object top =    i > 0       ? array[i-1][j] : null;
Object bottom = i < (m - 1) ? array[i+1][j] : null;

在任何情况下:不要通过捕获ArrayIndexOutOfBoundsException来解决此问题。它被认为是捕获可以100%避免的运行时异常的不良形式。

答案 1 :(得分:0)

例如参加

AclService

[3][3] array 用于行索引和列索引

只需检查

i and j

虽然id喜欢用try catch

来包围我的整个操作(检查邻居-1和+ 1水平和垂直)
//horizontal
if(i - 1 >= N){ //N being 3
//do check for
}
if(i + 1 <= N){ // N being 3
//do check
}
//vertical
if(j - 1 >= N){ //N being 3
//do check for
}
if(j + 1 <= N){ // N being 3
//do check
} 

答案 2 :(得分:0)

使用异常处理方法非常容易。

 somefunction(int arr[10][10], int num ){
int i, j;
  for(i=0; i<10; i++){
    for(j=0; j<10; j++){
      if(arr[i][j]==num)
        break;
    }
  }
//i is rows and j is columns
try{
  for(int k=-1 ; k<=1; k++){
    for(int l=-1 ; l<=1; l++){
      System.out.println(arr[i+k][j+l]);
    }
  }
}
catch (ArrayIndexOutOfBoundsException e){

}
}