2017-10-07 66 views
0

我创建称为BinarySearchTreean在菲罗I类实现了一个名为BinarySearchTree >>预购和BinarySearchTree >>索引递归方法产生#SubscriptOutOfBounds:8

预订方法:myArray的索引:位置

(myArray at: position) ~= -1 
ifTrue: [ 
     Transcript show: (myArray at: position). 
     self Preorder: myArray index: (position * 2). 
     self Preorder: myArray index: (position * 2) + 1. 
    ]. 

然后,我提供了这个数组#(90 60 95 50)索引1在我的二叉树中进行PreOrder搜索,这是我使用数组实现的,但它不起作用。 请帮助...

回答

0

#at:将发信号SubscriptOutOfBounds当该指数大于阵列的尺寸时< 0或(Smalltalk的集合是基于1的,即第一索引为1,而不是0)。 8显然大于4(大小为myArray)。

在开始时的检查将永远不会评估为False,因为您的数组没有条目-1,因此每次都会评估条件块。

由于您排除了所有实际感兴趣的代码,因此我无法真正地说出问题出在哪里。如果你补充说我可以告诉你更多。

+0

我认为所有必要的代码来获取错误在这里。如果您调用PreOrder:array index:1,因为它在每次调用中都重复了位置并再次调用相同的方法,那么调用超过大小的位置只是(短)时间的问题。 –

+0

嗯,是的......但你必须做出很多假设。对于OP来说,发布缺失的代码比对我们遍历所有可能性的排列(例如'position'的起始值,开始处的奇妙状况等)来说,可能更简单。 –