我正在尝试对用户使用优先级队列输入的正整数序列进行排序。我不知道如何实施,所以我想知道是否有人可以提供帮助。这就是我到目前为止所做的:
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之前,它开始从最小到最高的输入排序?
答案 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);