当前位置: 首页 > 面试题库 >

检查二维数组中的边界

狄天逸
2023-03-14
问题内容

我正在尝试检查2D数组中每个元素的相邻值,但是当我到达数组的边或角落时,得到了IndexOutOfBoundsException。例如,如果我的数组是:

| 2 | 4 | 2 | 7 | 8 |

| 8 | 1 | 0 | 5 | 6 |

| 0 | 3 | 1 | 5 | 2 |

| 1 | 9 | 7 | 2 | 0 |

我知道8的所有邻居都是7,5和6,但是我的if陈述并没有正确检查界限。我为此的代码是:

 int numOfRows = imageArray.length;
 int numOfColumns = imageArray[0].length;

 for(int i = 0; i < numOfRows; i++)
    for(int j = 0; j < numOfColumns; j++)

       if((j+1) < numOfColumns-1)

       if((i+1) < numOfRows-1)

       if((j-1) > 0 )

       if((i-1) > 0 )

       if((i+1) < numOfColumns-1 && (j+1) < numOfRows-1)

       if((i-1) >= 0 && (j-1) >= 0)

       if((i+1) < numOfColumns-1 && (j-1) >= 0)

       if((i-1) >= 0 && (j+1) < numOfRows-1)

我已经为此工作了一段时间,并经历了许多不同的技术来解决这个问题。任何帮助都会很棒。谢谢。


问题答案:

如果您试图获取所有相邻单元格并对其进行处理(例如添加它们),那么您需要进行某种边界检查,例如从中进行一些修改可能会起作用:

for (int i = 0; i < numOfRows; i++) {
    for (int j = 0; j < numOfCols; j++) {
        // check all bounds out of range:
        int iMin = Math.max(0, i - 1);
        int iMax = Math.min(numOfRows - 1, i + 1);
        int jMin = Math.max(0, j - 1);
        int jMax = Math.min(numOfCols - 1, j + 1);

        // loop through the above numbers safely
        for (int innerI = iMin; innerI <= iMax; innerI++) {
            for (int innerJ = jMin; innerJ <= jMax; innerJ++) {
                if (i != innerI && j != innerJ) {
                    // do what needs to be done
                }
            }
        }
    }
}

注意:代码尚未经过编译或测试,主要是为了向您展示可以做什么的想法,而不是复制粘贴的解决方案



 类似资料:
  • 题目链接 牛客网 题目描述 给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。 // html Consider the following matrix: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17,

  • 一、题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、解题思路 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束。 如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行。 也就是说如果要查找的数字不在数组的

  • 问题内容: 我对Swift中的2D数组感到非常困惑。让我逐步描述。如果我错了,请您纠正我。 首先; 空数组的声明: 其次,填充数组。(例如,i,j是for循环变量) 最后,在数组中编辑元素 问题答案: 定义可变数组 要么: 或者,如果您需要一个预定义大小的数组(如@ 0x7fffffff在评论中所述): 在位置更改元素 要么 更改子数组 要么 要么 如果在进行这些更改之前,您有3x2的数组,数组中

  • 问题内容: 我想知道如何在Python中声明一个二维数组。 前两个任务工作正常。但是当我尝试做时,出现以下错误: 我在尝试声明二维数组时做任何愚蠢的事情吗? 编辑: 但是我不知道数组(行和列)中的元素数量。 问题答案: 您不会在Python中“声明”数组或其他任何东西。您只需分配一个(新)变量。如果要使用多维数组,只需添加一个新数组作为数组元素。 要么

  • 问题内容: 是否有一种简单的方法来查找二维数组中某个元素的邻居(即,元素周围的八个元素)?缺少只是以不同的组合减去和增加索引,像这样: … 等等。 问题答案: (伪代码) 当然,这几乎要花费原始硬编码解决方案的许多行,但是通过这一解决方案,您可以最大程度地扩展“邻居”(2-3个或更多单元格)

  • 问题内容: 我对多维数组有这个问题。 给定以下多维数组: 我想检查它的值并找到重复项(即键0、2和3),仅留下一个键-值对删除其他键,结果是这样的: 我怎样才能做到这一点?? 问题答案: 这将使用以下命令从阵列中删除重复项: