2016-02-19 53 views
0

我有一個問題,重新創建Java的PriorityQueue類的插入或添加方法。PriorityQueue插入方法

有幾個規定:

  • 主要原因之一是,我不能從java.util.*包括ArrayList使用任何。

  • 我知道隊列必須按照某種優先順序排序,在這種情況下,我會對錢進行排序。 ,我插入到隊列中的項目看起來像這樣

    Penny,1971,4 
    Nickel,2002,9 
    Five,1980,2 
    etc.... 
    

所以,當我走在substring(0, 3)下面的代碼我真的只是把這個詞的前3個字母,因爲我想有PriorityQueue根據字母順序對項目進行排序,所以Dime, Nickel, Penny, Quarter etc.

我使用插入排序算法中的一些代碼對進入隊列的項進行排序。

的問題是,它正確地插入的第一個項目到隊列中,但我得到的

ArrayIndexOutOfBoundsException: 25 

上線

array[x] = array[x - 1]; 

數組元素的長度爲25 ...

我在做什麼錯了?有什麼我可以做得更好嗎?我難住這個問題....

任何幫助將不勝感激!

@Override 
public void insert(Money item) { 
    int x; 

    if(numElems == 0) { 
     array[numElems++] = item; //if its the first item simply insert it no need to worry about sorting 
    } else { 
     x = numElems; 

     while(x > 0 && item.toString().compareToIgnoreCase(array[x - 1].toString().substring(0, 3)) > 0) { 

      array[x] = array[x - 1]; 
      x--; 
     } 

     array[x] = item; 
     numElems++; 
    } 
} 

回答

0

如果數組的長度是25,那麼你就可以獲取最大指數爲24.記住,數組開始索引爲0

+0

是的,我相信我添加的元素在,因爲時Queue位置24插入從後面,並從(位置0)這是爲什麼我認爲遞減x(x--;)將起作用,因爲我在位置24添加元素,然後添加位置23等元素......但它不爲我工作 –

+0

'numElems',24或0的初始值是什麼? – Chara

+0

numElems的初始值在被構造函數調用時被設置爲0! –