队列元素被扰乱,而不是按顺序

时间:2013-09-24 20:31:11

标签: java stack queue fifo bluej

我在程序中遇到队列问题,要求用户输入一个单词,程序会将每个字母存储到队列中。当我输出队列的内容时,字母都被扰乱了。大多数词都会发生这种情况例如,当我输入“赛车”时,队列将显示为[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

        }
    }
}

2 个答案:

答案 0 :(得分:1)

PriorityQueue中的元素不遵循任何特定顺序,除了作为最小元素的头部。特别是,未定义迭代顺序。如果您从队列中连续remove,您将按自然顺序获取元素(在您的示例中按字母顺序排列)。

无论如何,它可能不是你需要的。为什么不使用你的堆栈呢?

答案 1 :(得分:0)

PriorityQueue不是FIFO队列。它对元素进行排序,以使具有最高优先级的元素始终位于队列的头部。使用LinkedList