GET PUT msg1 10 5 PUT msg2 10 4 GET GET GET
EMPTY QUEUE! msg2 10 msg1 10 EMPTY QUEUE!
代码实现:(解题思路,代码解释)
/* * 解题思路:首先申明题目很水啊。感觉自己没用优先队列哦,只用了队列而已。我的思想是这样的,根据题目要求是最先考虑信息的优先级,然后如果有相同优先级的信息的话,就把最先 *进来的 消息输出去。在我看来,利用一个ArrayList做队列,先把输入需要输入的消息,参数和优先级用对象message封装了放到list中,然后在弹出消息的时候只要从最开始找到那个优先级 *最小的消息找到,并记录好,然而这个消息就是满足条件的消息了,把他从list中弹出。 */ import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { List<message> list=new ArrayList<message>();//利用ArrayList做队列 Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String str = sc.nextLine(); //接收命令 String[] strs=str.split(" "); //根据给的案例,可以用空格分隔命令(str[0],str[1],str[2],str[3]分别对应处理命令,消息,参数,优先级) //如果是PUT则把对应数据封装好加入list中 if(strs[0].equals("PUT")){ list.add(new message(strs[1],strs[2],strs[3])); }else{ //如果list为空,则输出EMPTY QUEUE! if(list.size()==0){ System.out.println("EMPTY QUEUE!"); }else{ int outIndex=-1; //用来存放需要输出的消息在list中的位置 int Priority=Integer.MAX_VALUE; //用来存储优先级,初始化最大 //遍历list,知道到最早的那个并且优先级最高的消息的在list中的位置 for(int i=0;i<list.size();i++){ if(Priority>Integer.parseInt(list.get(i).getPriority())){ Priority=Integer.parseInt(list.get(i).getPriority()); outIndex=i; } } //输出 System.out.println(list.remove(outIndex).toString()); } } } } } //用来封装消息信息的类message class message{ private String msg=null; //消息 private String num=null; //参数 private String Priority=null; //优先级 //构造函数 public message(String msg, String num, String priority) { this.msg = msg; this.num = num; Priority = priority; } //获取优先级 public String getPriority() { return Priority; } //toString方法 @Override public String toString() { return msg + " " + num; } }