假设您有一个2D数组arr[N][N]
。如果我给你一个输入arr[i][j]
,我应该得到左,右,上和下元素,即arr[i][j-1], arr[i][j+1], arr[i-1][j]
和arr[i+1][j]
。
例如:Arr[3][3]= {1, 2, 3, 4, 5, 6, 7, 8, 9}
如何编写应考虑边界条件的程序?
答案 0 :(得分:1)
所以你的程序由两部分组成:
查找输入是否存在于某个索引处。通过循环遍历数组找到它,如下所示:
for( int i = 0; i < N; i++ ){
for( int j = 0; j < N; j++ ){
if(arr[i][j] == input) //produce output
}
}
制作输出。为简单起见,我将打印出来,但如果你的目标是一个返回输入数字周围值的函数,那么你应该malloc一个数组并将值复制到数组。要打印,首先检查我们是否在界限内,如果我们不在界限内,请不要尝试打印,否则会出现问题。
for( int k = i - 1 ; k < i + 2; k++ ){
for(int l = j - 1; l < j + 2; j++ ){
if ( k > -1 && l > -1 && k < N && j < N ){ // check if in bounds
printf("%i ", arr[k][l]);
}
}
}
答案 1 :(得分:0)
当您访问数组中的索引时,只需确保您没有访问无效索引,例如index < 0
或index > size
。所以在你的情况下
if(j > 0) System.out.println(a[i][j-1]);
if(i > 0) System.out.println(a[i-1][j]);
if(j < N-1) System.out.println(a[i][j+1]);
if(i < N-1) System.out.println(a[i+1][j]);
如果您想在索引无效时返回null
,只需为每个if
添加in else部分。