2013-09-24 2 views
0

У меня возникают проблемы с очередью в моей программе, где она запрашивает у пользователя ввод слова, а программа сохраняет каждую букву в очередь. Когда я выводю содержимое очереди, буквы все скремблируются. Это происходит с большинством слов. Например, когда я ввожу «гоночный автомобиль», очередь будет отображаться как [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

Из [Javadoc] (http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html) на 'PriorityQueue': элементы очереди приоритетов упорядочены в соответствии с их естественный порядок. – GriffeyDog

ответ

1

Элементы в PriorityQueue не соответствуют какому-либо определенному заказу, за исключением головы, которая является наименьшим элементом. В частности, порядок итераций не определен. Если вы будете постоянно remove из очереди, вы получите элементы в натуральном порядке (в алфавитном порядке в вашем примере).

В любом случае, возможно, это не то, что вам нужно. Почему бы вам не использовать свой стек?

+0

Быстрый поиск даст вам ответ, но LIFO: Stack, FIFO: большинство очередей, например LinkedList или ArrayBlockingQueue. – assylias

+0

Gotcha, спасибо большое. – TheEyesHaveIt

0

PriorityQueue не является очереди FIFO. Он упорядочивает элементы так, чтобы тот, у которого был наивысший приоритет, всегда находился во главе очереди. Используйте LinkedList.

Смежные вопросы