Java优先级队列对整数输入进行排序

时间:2013-11-11 21:58:28

标签: java sorting input priority-queue

我正在尝试对用户使用优先级队列输入的正整数序列进行排序。我不知道如何实施,所以我想知道是否有人可以提供帮助。这就是我到目前为止所做的:

import java.util.PriorityQueue;
import java.util.Scanner;

    public class priorityquene implements Comparable<priorityquene> 
    {
        final int priority;
        final String name;

        public priorityquene(int p, String n) 
        {
            priority = p;
            name = n;
        }

        public String toString() 
        {
            return priority + ", " + name;
        }

        public int compareTo(priorityquene other) 
        {
            return priority < other.priority ? -1 : priority > other.priority ? 1 : 0;
        }

        public static void main(String[] args) 
        {
            PriorityQueue<priorityquene> pq = new PriorityQueue<priorityquene>();
            Scanner input = new Scanner(System.in); 
            System.out.println("Please enter a positive integer: ");
            int num1 = input.nextInt();
            pq.add(new priorityquene(num1, " "));
            System.out.println("Please enter a positive integer: ");
            int num2 = input.nextInt();
            pq.add(new priorityquene(num2, " "));
            System.out.println("Please enter a positive integer: ");
            int num3 = input.nextInt();
            pq.add(new priorityquene(num3, " "));
            System.out.println("Please enter a positive integer: ");
            int num4 = input.nextInt();
            pq.add(new priorityquene(num4, " "));
            System.out.println("Please enter a positive integer: ");
            int num5 = input.nextInt();
            pq.add(new priorityquene(num5, " "));

            while (!pq.isEmpty())
                System.out.println(pq.remove());
        }
    }

有些事情我不确定如何实施。 如何将其设置为接受无限输入,并在输入特定整数时,例如0;到0之前,它开始从最小到最高的输入排序?

3 个答案:

答案 0 :(得分:0)

要重新提示输入,请尝试以下操作:

int num;
do {
  System.out.println("Please enter a positive integer: ");
  num = input.nextInt();
  pq.add(new priorityquene(num, " "));
} while (num > 0)

答案 1 :(得分:0)

  

如何将其设置为接受无限输入

在一个循环中。

  

并且当输入特定整数时,例如0;到0之前,它开始从最小到最高的输入排序?

优先级队列不起作用。每次向它们添加内容时,它们会进行部分排序,并且每次删除某些内容时都会重复这些内容。如果您的意思是要显示 PQ,只需在输入0的情况下重复删除并打印第一个条目。

鉴于您正在使用priorityqueue,您不应该为自己的班级java.util.PriorityQueue.命名。这只会引起混淆。

答案 2 :(得分:0)

我会在自己的方法中使用带有return的“永远”循环。

private static void enqueueNumbersFromScanner(Scanner input, PriorityQueue pq) {
    for(;;) {  
        System.out.println("Please enter a positive integer: ");
        int response = input.nextInt();
        if (response == 0) {
            return;
        }
        pq.add(new priorityquene(response, " "));
    }
}

然后,在main内,写下

enqueueNumbersFromScanner(input, pq);