在尝试确定数据是否遵循2i + 1/2公式子父关系时,我遇到了ArrayIndexOutofBound错误的问题。你知道我怎么解决这个问题?
for (int i = 0; i < array.length; i++)
{
if ((array[i] < array[2*i + 1]) || (array[i] < array[2*i + 2]))
{
bool = false;
....
}
}
答案 0 :(得分:0)
我建议先检查数组的边界,如果它包含足够的元素,那么你可以比较它们:
if ((array.length >= 2*i + 2)
&& ((array[i] < array[2*i + 1]) || (array[i] < array[2*i + 2])))
{
bool = false;
....
}
答案 1 :(得分:0)
你的for-loop警卫允许i == array.length -1
。但是在循环内部,您会查找元素2 * i + 2
。那是2 * array.length
。这超出了数组的末尾,并且总是会抛出一个(在i == 0时除外)。
将for-loop guard更改为i < ((array.length / 2) - 1)
,以使2 * i + 2
的最大值为array.length - 1.此外,请确保对偶数和奇数长度的数组进行测试;我认为逻辑只适用于一种情况。