2013-05-29 64 views
0
/* INPUT 
Greenland 
Denmark 
Iceland 
Finland 
Sweden 
Norway 
*/ 

該部分返回所需的一切。除了最後一個,我得到了他們。優先隊列排序所有項目,但最後

public void insert(Country item){ 
     System.out.println("Item receieved by pQueue: " + item.getCountryName()); 
     int j; 
     if (nItems==0) 
      pQueArray[nItems++] = item; 
     else{ 
     for (j=nItems-1; j>=0; --j) 
      if (item.getCountryName().compareTo(pQueArray[j].getCountryName()) < 0) 
       pQueArray[j+1] = pQueArray[j]; 
      else 
       break; 
     // end for 
     pQueArray[j+1] = item;           
     nItems++; 
     } // end else 
} // end insert() 

它沒有正確返回最後一個項目,我不明白爲什麼?

/* OUTPUT 
Denmark 
Finland 
Greenland 
Iceland`` 
Sweden 
Norway */ 
+0

爲什麼不使用java的優先級隊列(http://docs.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html)與自定義比較? –

+0

我強烈建議您自己學習如何進行調試,因爲它會長期支付分紅。在分配給pQueArray [...]的兩種情況下,打印發生在隊列中的事件。你會很快發現錯誤是什麼。 – jarmod

回答

0

你的問題就出在線路:

pQueArray[j+1] = item;

這表示您要添加的最新項目進入隊列的最後一個位置,你都做了比較處理後,才其餘的元素。