我正在为学校开展MinHeap实施,我遇到了一个问题。代码通常运行良好,但有时会在我的heapify方法中生成超出范围异常的参数。我试图找出问题,但我是一个糟糕的调试器。
这是我的函数代码:
private void Heapify(int i)
{
int least;
int leftchild = 2 * (i + 1) - 1;
int rightchild = 2 * (i + 1);
if (leftchild < heap.Count && (heap[rightchild].CompareTo(heap[i]) < 0))
{
least = 1;
}
else
{
least = i;
}
if (rightchild < heap.Count && (heap[rightchild].CompareTo(heap[least]) < 0))
{
least = rightchild;
}
if (least != i)
{
T temp = heap[i];
heap[i] = heap[least];
heap[least] = temp;
this.Heapify(least);
}
答案 0 :(得分:0)
if (leftchild < heap.Count && (heap[rightchild].CompareTo(heap[i]) < 0))
如果rightchild >= heap.Count
,这会给你一个例外。
答案 1 :(得分:0)
超出范围的例外情况通常很容易追查。基本上,您必须确保无论何时通过索引访问数组中的项目,所述数组的计数/长度都大于索引。换句话说,确保在每次调用堆[#index]时,#index&lt; heap.Count(通过直接检查或通过方法的逻辑)