2017-10-07 43 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'的起始值,開始處的奇妙狀況等)來說,可能更簡單。 –