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