Java를 사용하여 알고리즘 소개, 제 3 판, 알고리즘 소개를 많은 시도없이 구현하려고했습니다. 거의 언제나 구현하려고 할 때마다 많은 오류가 발생합니다. 저자 자신이 자신의 의사 코드를 구현 하려는지 확실하지 않습니다. 그러나 구체적으로이 경우 Btree 알고리즘에 문제가 있습니다. 나는이 문제가 B-Tree-Insert-Nonfull 방법의 어딘가에 있다고 생각한다. 프로그램을 실행하려고하면이 줄에서 Null 포인터 예외가 발생합니다.Btree 알고리즘으로 어려움을 겪고 있습니다.
int i = x.totalKeys - 1;
그러나 이는 의미가 없습니다. 이 경우 x와 같은 모든 노드는 생성자에서 값 0으로 초기화되므로 오류가 어떻게 발생합니까?
public void bTreeInsertNonfull(Node x, Integer k)
{
int i = x.totalKeys - 1;
if (x.leaf || (x.children[i] == null))
{
while((i >= 0) && (k < x.keys[i]))
{
x.keys[i+1] = x.keys[i];
i = i - 1;
}
x.keys[i+1] = k;
x.totalKeys = x.totalKeys + 1;
}
else
{
while ((i >= 0) && x.keys[i] != null)
{
if (k < x.keys[i])
{
i = i - 1;
}
}
i = i + 1;
if ((x.children[i] != null) && (x.children[i].totalKeys == tUpper))
{
bTreeSplitChild(x, i, x.children[i]);
if (k > x.keys[i])
{
i = i + 1;
}
}
bTreeInsertNonfull(x.children[i], k);
}
}
은'x' 또는'x.totalkeys' null입니까? 첫 번째 줄에서 null 참조가 발생하는 함수에 코드를 게시하면 편집에 도움이되지 않습니다.이 함수는 재귀 함수이므로 오류가 실제로이 함수에 있음 - 오류는 노드'x '가 함수가 null이거나 변수'x.totalkeys'가 초기화되지 않았습니다. –
도서의 배열이 알고리즘 의사 코드에있는 것처럼 1에서 색인이 생성되었는지 확인하고 Java 코드 (배열을 0으로 색인화)를 적용했는지 확인하십시오. 1 개의 큰 Java 배열을 만들고 인덱스 0을 사용하지 않은 상태로 유지하거나 알고리즘이 의사 코드보다 작은 인덱스 하나를 사용하도록 조정하십시오. – hyde