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

        }
    }
}
4

2 回答 2

1

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

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

于 2013-09-24T20:36:47.483 回答
0

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

于 2013-09-24T20:35:07.767 回答