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;
	}
}                                    
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/xionghui2013/article/details/47793701