2013-09-24 26 views
0

我在我的程序中遇到麻煩,它要求用戶輸入一個單詞,程序會將每個字母存儲到隊列中。當我輸出隊列的內容時,這些字母全部被加密。這發生在大多數單詞上。例如,當我輸入「racecar」時,隊列將顯示爲[a,c,a,r,e,c,r],而不是[r,a,c,e,c,a,r]。任何想法爲什麼發生這種情況隊列元素被加密,而不是按順序

import java.util.Scanner; 
import java.util.*; 

public class WordQueue 
{ 
    public static void main(String arg[]) 
    { 
     while(true){ 
      String phrase; 
      int phraselength; 
      PriorityQueue queue = new PriorityQueue(); 
      Scanner sc = new Scanner(System.in); 
      System.out.println("Enter a word/phrase"); 
      phrase = sc.nextLine(); 
      phrase = phrase.replaceAll("\\p{Punct}|\\d",""); //remove all punctuation 
      phraselength = phrase.length();     //get length of phrase 
      System.out.println(phraselength); 

      for(int x = 0; x <= phraselength-1; x++)   //store each letter 
      {            //in queue 
       queue.offer(phrase.charAt(x));  
      } 

      System.out.println(""); 

       System.out.printf("%s ", queue);    //output queue 

     } 
    } 
} 
+1

從Priority_ueue上的[Javadoc](http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html):優先級隊列的元素按照他們的自然順序。 – GriffeyDog

回答

1

PriorityQueue中的元素不遵循任何特定的順序,除了頭是最小的元素。特別是,迭代次序沒有被定義。如果從隊列中連續輸入remove,則會按自然順序獲取元素(在您的示例中按字母順序排列)。

無論如何,這可能不是你所需要的。爲什麼不用你的堆棧呢?

+0

快速搜索會給你答案,但是LIFO:Stack,FIFO:大多數隊列,例如LinkedList或ArrayBlockingQueue。 – assylias

+0

非常感謝。 – TheEyesHaveIt

0

PriorityQueue不是FIFO隊列。它對元素進行排序,使得具有最高優先級的元素始終位於隊列的頭部。使用LinkedList