-1

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

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 之前的输入进行排序?

4

3 回答 3

0

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

在一个循环中。

当输入一个特定的整数时,比如 0;到目前为止,它开始从最小到最高对 0 之前的输入进行排序?

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

你不应该命名你自己的类priorityqueue,因为你正在使用java.util.PriorityQueue.它只会引起混淆。

于 2013-11-12T00:37:04.653 回答
0

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

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);
于 2013-11-12T01:27:34.673 回答
0

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

int num;
do {
  System.out.println("Please enter a positive integer: ");
  num = input.nextInt();
  pq.add(new priorityquene(num, " "));
} while (num > 0)
于 2013-11-12T00:23:33.667 回答